summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wilhelm <shieldwed@outlook.com>2017-04-20 17:05:29 -0600
committerDaniel Wilhelm <shieldwed@outlook.com>2017-04-20 17:05:29 -0600
commit94eeff901cb5f3d435840a662b4438c631127183 (patch)
tree7a4e7ed4627fb2ddfa3ef5176b7b35981b52c51f
parentnormalize most lineendings (diff)
downloadFreeFileSync-94eeff901cb5f3d435840a662b4438c631127183.tar.gz
FreeFileSync-94eeff901cb5f3d435840a662b4438c631127183.tar.bz2
FreeFileSync-94eeff901cb5f3d435840a662b4438c631127183.zip
9.0
-rwxr-xr-xChangelog.txt14
-rwxr-xr-xFreeFileSync/Build/Help/html/exclude-items.html2
-rwxr-xr-xFreeFileSync/Build/Help/html/synchronization-settings.html4
-rwxr-xr-xFreeFileSync/Build/Help/html/synchronize-with-sftp.html4
-rwxr-xr-xFreeFileSync/Build/Languages/arabic.lng378
-rwxr-xr-xFreeFileSync/Build/Languages/bulgarian.lng472
-rwxr-xr-xFreeFileSync/Build/Languages/chinese_simple.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/chinese_traditional.lng366
-rwxr-xr-xFreeFileSync/Build/Languages/croatian.lng354
-rwxr-xr-xFreeFileSync/Build/Languages/czech.lng372
-rwxr-xr-xFreeFileSync/Build/Languages/danish.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/dutch.lng414
-rwxr-xr-xFreeFileSync/Build/Languages/english_uk.lng352
-rwxr-xr-xFreeFileSync/Build/Languages/finnish.lng358
-rwxr-xr-xFreeFileSync/Build/Languages/french.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/german.lng128
-rwxr-xr-xFreeFileSync/Build/Languages/greek.lng374
-rwxr-xr-xFreeFileSync/Build/Languages/hebrew.lng351
-rwxr-xr-xFreeFileSync/Build/Languages/hindi.lng352
-rwxr-xr-xFreeFileSync/Build/Languages/hungarian.lng366
-rwxr-xr-xFreeFileSync/Build/Languages/italian.lng352
-rwxr-xr-xFreeFileSync/Build/Languages/japanese.lng350
-rwxr-xr-xFreeFileSync/Build/Languages/korean.lng352
-rwxr-xr-xFreeFileSync/Build/Languages/lithuanian.lng358
-rwxr-xr-xFreeFileSync/Build/Languages/norwegian.lng281
-rwxr-xr-xFreeFileSync/Build/Languages/polish.lng354
-rwxr-xr-xFreeFileSync/Build/Languages/portuguese.lng452
-rwxr-xr-xFreeFileSync/Build/Languages/portuguese_br.lng382
-rwxr-xr-xFreeFileSync/Build/Languages/romanian.lng348
-rwxr-xr-xFreeFileSync/Build/Languages/russian.lng370
-rwxr-xr-xFreeFileSync/Build/Languages/serbian.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/slovak.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/slovenian.lng346
-rwxr-xr-xFreeFileSync/Build/Languages/spanish.lng416
-rwxr-xr-xFreeFileSync/Build/Languages/swedish.lng350
-rwxr-xr-xFreeFileSync/Build/Languages/turkish.lng368
-rwxr-xr-xFreeFileSync/Build/Languages/ukrainian.lng350
-rwxr-xr-xFreeFileSync/Build/Resources.zipbin304445 -> 306174 bytes
-rwxr-xr-xFreeFileSync/Source/algorithm.cpp80
-rwxr-xr-xFreeFileSync/Source/algorithm.h21
-rwxr-xr-xFreeFileSync/Source/application.cpp2
-rwxr-xr-xFreeFileSync/Source/comparison.cpp12
-rwxr-xr-xFreeFileSync/Source/file_hierarchy.cpp56
-rwxr-xr-xFreeFileSync/Source/file_hierarchy.h218
-rwxr-xr-xFreeFileSync/Source/fs/abstract.cpp118
-rwxr-xr-xFreeFileSync/Source/fs/abstract.h80
-rwxr-xr-xFreeFileSync/Source/fs/native.cpp101
-rwxr-xr-xFreeFileSync/Source/lib/binary.cpp4
-rwxr-xr-xFreeFileSync/Source/lib/db_file.cpp21
-rwxr-xr-xFreeFileSync/Source/lib/db_file.h12
-rwxr-xr-xFreeFileSync/Source/lib/help_provider.h2
-rwxr-xr-xFreeFileSync/Source/lib/parallel_scan.cpp4
-rwxr-xr-xFreeFileSync/Source/lib/parse_plural.h79
-rwxr-xr-xFreeFileSync/Source/lib/process_xml.cpp2
-rwxr-xr-xFreeFileSync/Source/lib/process_xml.h1
-rwxr-xr-xFreeFileSync/Source/lib/status_handler.h15
-rwxr-xr-xFreeFileSync/Source/lib/versioning.cpp54
-rwxr-xr-xFreeFileSync/Source/lib/versioning.h3
-rwxr-xr-xFreeFileSync/Source/process_callback.h16
-rwxr-xr-xFreeFileSync/Source/structures.cpp8
-rwxr-xr-xFreeFileSync/Source/structures.h8
-rwxr-xr-xFreeFileSync/Source/synchronization.cpp287
-rwxr-xr-xFreeFileSync/Source/synchronization.h2
-rwxr-xr-xFreeFileSync/Source/ui/batch_status_handler.cpp5
-rwxr-xr-xFreeFileSync/Source/ui/custom_grid.cpp24
-rwxr-xr-xFreeFileSync/Source/ui/folder_selector.cpp8
-rwxr-xr-xFreeFileSync/Source/ui/folder_selector.h2
-rwxr-xr-xFreeFileSync/Source/ui/grid_view.cpp8
-rwxr-xr-xFreeFileSync/Source/ui/gui_generated.cpp245
-rwxr-xr-xFreeFileSync/Source/ui/gui_generated.h36
-rwxr-xr-xFreeFileSync/Source/ui/gui_status_handler.cpp14
-rwxr-xr-xFreeFileSync/Source/ui/main_dlg.cpp30
-rwxr-xr-xFreeFileSync/Source/ui/small_dlgs.h6
-rwxr-xr-xFreeFileSync/Source/ui/tree_view.cpp8
-rwxr-xr-xFreeFileSync/Source/version/version.h2
-rwxr-xr-xwx+/file_drop.h2
-rwxr-xr-xzen/file_access.cpp72
-rwxr-xr-xzen/file_access.h13
-rwxr-xr-xzen/file_id_def.h2
-rwxr-xr-xzen/file_traverser.h4
-rwxr-xr-xzen/symlink_target.h4
-rwxr-xr-xzenXml/zenxml/parser.h2
82 files changed, 9101 insertions, 4412 deletions
diff --git a/Changelog.txt b/Changelog.txt
index 09812fb8..5791d720 100755
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,3 +1,17 @@
+FreeFileSync 9.0
+----------------
+Support synchronization via FTP (File Transfer Protocol) and FTPS (SSL/TLS)
+Notify failure to set modification time as a warning instead of an error
+Allow intermediate non-folder components when checking path status
+Prevent file drop events from propagating to parent windows
+Create Downloads folder if not yet existing when running auto-updater
+Get all MTP input stream attributes as a single device access
+Improved SFTP input stream copying time by 20%
+Buffer (S)FTP sessions based on all login information
+Finalize all installation steps before showing finished page
+Updated translation files
+
+
FreeFileSync 8.10 [2017-03-12]
------------------------------
Fully preserve case-sensitive file paths (Windows, macOS)
diff --git a/FreeFileSync/Build/Help/html/exclude-items.html b/FreeFileSync/Build/Help/html/exclude-items.html
index 4b0e2432..28ccaa58 100755
--- a/FreeFileSync/Build/Help/html/exclude-items.html
+++ b/FreeFileSync/Build/Help/html/exclude-items.html
@@ -88,7 +88,7 @@
<b>both</b> file and directory paths. If you want to consider directories
only, you can give a hint by appending a path separator.
- <li>On Windows both slash (<b>/</b>) and backslash (<b>\</b>) may be used as path separator characters.
+ <li>On Windows both slash (<b>/</b>) and backslash (<b>\</b>) may be used as the path separator character.
</ul>
</div>
</body>
diff --git a/FreeFileSync/Build/Help/html/synchronization-settings.html b/FreeFileSync/Build/Help/html/synchronization-settings.html
index 4dc2fae5..48b9cb5e 100755
--- a/FreeFileSync/Build/Help/html/synchronization-settings.html
+++ b/FreeFileSync/Build/Help/html/synchronization-settings.html
@@ -18,7 +18,7 @@
FreeFileSync is able to detect moved files on one side and can quickly apply the same move on the target side during synchronization instead of a slow copy and delete. To make this work FreeFileSync requires database files (sync.ffs_db) to compare the current file system state against the time of the last synchronization.
</p>
<p>
- The <i>Two-Way</i> variant already creates database files, therefore detection of moved files is always active.<br>
+ The <i>Two way</i> variant already creates database files, therefore detection of moved files is always active.<br>
The <i>Mirror</i> variant however does not need the database files to find synchronization directions, so detection of moved files
is not available by default. If you don't mind the creation of the database files you can enable this feature by
selecting the <b>Detect moved files</b> checkbox.
@@ -27,7 +27,7 @@
<div class="bluebox">
<b>Note</b>
<ul style="margin: 0">
- <li>Detection of moved files is not yet possible when synchronizing a folder pair for the first time. Only beginning with the second sync
+ <li>Detection of moved files is not yet possible when synchronizing a folder pair for the first time. Only beginning with the <b>second</b> sync
the database files are available to determine moved files.
<li>Detection is not supported by all file systems. Most notably, certain file moves on the FAT file system cannot be detected.
Also virtualized file systems, e.g. a mounted WebDAV drive, might not support move detection. In these cases FreeFileSync will automatically fall back to copy and delete.
diff --git a/FreeFileSync/Build/Help/html/synchronize-with-sftp.html b/FreeFileSync/Build/Help/html/synchronize-with-sftp.html
index fdccafba..c7b3b343 100755
--- a/FreeFileSync/Build/Help/html/synchronize-with-sftp.html
+++ b/FreeFileSync/Build/Help/html/synchronize-with-sftp.html
@@ -18,6 +18,8 @@
<div class="bluebox">
<b>Note</b><br>In case the SFTP server sets file modification times to the current time
you can do a <a href="comparison-settings.html">Compare by File Size</a> as a workaround.
+ Another solution is to set up the <i>Two way</i> variant and have the files with the newer dates
+ copied back from the server during the next synchronization.
</div>
<br>
@@ -36,7 +38,7 @@
setting up too many connections and channels might actually slow the overall process down.
Creating extra connections is slower than creating extra channels.<br>&nbsp;
- <li>SFTP servers have internal limits on the number of connections and channels. Generally servers expect
+ <li>SFTP servers have internal limits on the number of allowed connections and channels. Generally servers expect
one connection per user, so this number should be kept rather low. If too many connections and channels are used the server
may decide to stop responding.
</ul>
diff --git a/FreeFileSync/Build/Languages/arabic.lng b/FreeFileSync/Build/Languages/arabic.lng
index 1f735dae..36435abb 100755
--- a/FreeFileSync/Build/Languages/arabic.lng
+++ b/FreeFileSync/Build/Languages/arabic.lng
@@ -7,21 +7,6 @@
<plural_definition>n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5</plural_definition>
</header>
-<source>%x: Invalid plural form definition</source>
-<target></target>
-
-<source>Active connections: %x</source>
-<target></target>
-
-<source>
-<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
-<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
-</source>
-<target></target>
-
-<source>SFTP timeout reached.</source>
-<target></target>
-
<source>Both sides have changed since last synchronization.</source>
<target>كلا الجانبين قد تغير منذ المزامنة الأخيرة.</target>
@@ -37,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>تحديد الاتجاهات الافتراضية للمزامنة: ستتم الكتابة فوق الملفات القديمة بالملفات الأحدث.</target>
-<source>Creating folder %x</source>
-<target>إنشاء مجلد %x</target>
-
<source>Creating file %x</source>
<target>إنشاء الملف %x</target>
+<source>Creating folder %x</source>
+<target>إنشاء مجلد %x</target>
+
<source>Creating symbolic link %x</source>
<target>إنشاء ارتباط رمزي %x</target>
@@ -115,6 +100,9 @@
<source>Path to an alternate GlobalSettings.xml file.</source>
<target>تحديد مسار مختلف لملف GlobalSettings.xml.</target>
+<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source>
+<target>أي عدد من ملفات تكوين FreeFileSync بامتداد .ffs_gui أو/و .ffs_batch.</target>
+
<source>Any number of alternative directory pairs for at most one config file.</source>
<target>أي عدد من أزواج المسارات البديلة من أجل ملف خيارات واحد.</target>
@@ -127,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>إذا تم تجاهل هذا الخطأ سيتم اعتبار المجلدات فارغة. يتم إنشاء المجلدات المفقودة تلقائيا عند الحاجة.</target>
-<source>A folder input field is empty.</source>
-<target>حقل إدخال خاص بمجلد فارغ.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>سيتم اعتبار المجلد الموافق كمجلد فارغ.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>مسارات المجلدات التالية معتمدة على بعضها:</target>
-
<source>File %x has an invalid date.</source>
<target>يحتوي الملف %x تاريخ غير صالح.</target>
<source>Date:</source>
<target>التاريخ:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>الملفات %x لها نفس التاريخ ولكن حجم مختلف.</target>
+<source>Files have the same date but a different size.</source>
+<target>الملفات لها نفس التاريخ ولكن حجم مختلف.</target>
<source>Size:</source>
<target>الحجم:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>تم تجاهل مقارنة المحتوى للملفات المستثناة %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>تم تخطي مقارنة المحتوى لملفات مستبعدة.</target>
<source>Items differ in attributes only</source>
<target>العناصر مختلفة في السمات فقط</target>
@@ -199,6 +178,21 @@
<source>Starting comparison</source>
<target>بدأ عملية المقارنة</target>
+<source>A folder input field is empty.</source>
+<target>حقل إدخال خاص بمجلد فارغ.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>سيتم اعتبار المجلد الموافق كمجلد فارغ.</target>
+
+<source>Exclude:</source>
+<target>استثناء:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>يوجد مجلد أساسي لزوج من المجلدات في المجلد الآخر.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>يجب استبعاد المجلد من المزامنة عبر المرشح.</target>
+
<source>Calculating sync directions...</source>
<target>جاري حساب اتجاهات المزامنة...</target>
@@ -259,12 +253,6 @@
<source>Update attributes on right</source>
<target>تحديث السمات على اليسار</target>
-<source>Cannot write permissions of %x.</source>
-<target>لا يمكن كتابة أذونات %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>العملية غير مدعومة لأنواع المجلدات مختلفة الأساس.</target>
-
<source>Cannot write file %x.</source>
<target>لا يمكن كتابة الملف %x.</target>
@@ -279,6 +267,12 @@ Actual: %y bytes
الفعلي: ‎%y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>لا يمكن كتابة أذونات %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>العملية غير مدعومة لأنواع المجلدات مختلفة الأساس.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>لا يمكن نسخ الرابط الرمزي من %x إلى %y.</target>
@@ -288,36 +282,30 @@ Actual: %y bytes
<source>Unable to connect to %x.</source>
<target>لا يمكن الاتصال بـ %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>فشل الحصول على معلومات حول الخادم %x.</target>
+
<source>Cannot open directory %x.</source>
<target>لا يمكن فتح المسار %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>لا يمكن تعداد المسار %x.</target>
+<source>Cannot read directory %x.</source>
+<target>لا يمكن قراءة الدليل %x.</target>
<source>Cannot read file attributes of %x.</source>
<target>لا يمكن قراءة سمات الملف %x.</target>
-<source>Cannot find %x.</source>
-<target>لا يمكن العثور على %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>تعذر فتح الملف %x.</target>
-
<source>Cannot read file %x.</source>
<target>لا يمكن قراءة الملف %x.</target>
-<source>Cannot find device %x.</source>
-<target>لا يمكن العثور على الجهاز %x.</target>
-
<source>Cannot create directory %x.</source>
<target>لا يمكن إنشاء المسار %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>لا يمكن حذف المسار %x.</target>
-
<source>Cannot delete file %x.</source>
<target>لا يمكن حذف الملف %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>لا يمكن حذف المسار %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>لا يمكن كتابة وقت تعديل %x.</target>
@@ -327,15 +315,74 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>لا يمكن حل الارتباط الرمزي %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>لا يمكن تحديد مساحة القرص الحرة لـ %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>تعذر نقل %x إلى سلة المحذوفات.</target>
+<source>Cannot open file %x.</source>
+<target>تعذر فتح الملف %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>لا يمكن العثور على الجهاز %x.</target>
+
+<source>Cannot find %x.</source>
+<target>لا يمكن العثور على %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>نوع العنصر %x غير مدعوم:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>لا يمكن حذف الرابط الرمزي %x.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>لا يمكن تحديد مساحة القرص الحرة لـ %x.</target>
+
<source>Incorrect command line:</source>
<target>سطر أوامر خاطئ:</target>
+<source>Error Code %x</source>
+<target>رمز الخطأ %x</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>لا يدعم الخادم المصادقة عبر %x.</target>
+
+<source>Required:</source>
+<target>مطلوب:</target>
+
+<source>Unable to access %x.</source>
+<target>لا يمكن الوصول إلى %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>انقضت مهلة العملية بعد 0 ثانية.</pluralform>
+<pluralform>انقضت مهلة العملية بعد 1 ثانية.</pluralform>
+<pluralform>انقضت مهلة العملية بعد 2 ثانية.</pluralform>
+<pluralform>انقضت مهلة العملية بعد %x ثوان.</pluralform>
+<pluralform>انقضت مهلة العملية بعد %x ثانية.</pluralform>
+<pluralform>انقضت مهلة العملية بعد %x ثانية.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>لا يمكن الانتظار على أكثر 0 اتصال في وقت واحد.</pluralform>
+<pluralform>لا يمكن الانتظار على أكثر 1 اتصال في وقت واحد.</pluralform>
+<pluralform>لا يمكن الانتظار على أكثر 2 اتصال في وقت واحد.</pluralform>
+<pluralform>لا يمكن الانتظار على أكثر %x اتصالات في وقت واحد.</pluralform>
+<pluralform>لا يمكن الانتظار على أكثر من %x اتصالات في وقت واحد.</pluralform>
+<pluralform>لا يمكن الانتظار على أكثر من %x اتصالات في وقت واحد.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>الاتصال النشط: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>فشل فتح قناة SFTP رقم %x.</target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -370,11 +417,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>ملف قاعدة البيانات %x غير موجود حتى الآن.</target>
-<source>Database file is corrupt:</source>
-<target>ملف قاعدة البيانات معطوب:</target>
+<source>Database file is corrupted:</source>
+<target>ملف قاعدة البيانات تالف:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>لا تحتوي ملفات قاعدة البيانات حتى الآن على معلومات حول المزامنة الأخيرة.</target>
-<source>Database files do not share a common session.</source>
-<target>ملفات قواعد البيانات لا تشترك في جلسة عمل مشتركة.</target>
+<source>Loading file %x...</source>
+<target>جار تحميل الملف %x...</target>
+
+<source>Saving file %x...</source>
+<target>جاري حفظ الملف %x...</target>
<source>Searching for folder %x...</source>
<target>البحث عن المجلد %x...</target>
@@ -407,9 +460,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>اكتشاف قفل مهمل...</target>
-<source>Saving file %x...</source>
-<target>جاري حفظ الملف %x...</target>
-
<source>Items processed:</source>
<target>معالجة العناصر:</target>
@@ -668,14 +718,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>المساحة الحرة المتوفرة على القرص غير كافية:</target>
-<source>Required:</source>
-<target>مطلوب:</target>
-
<source>Available:</source>
<target>متاح:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>عدد من أزواج المجلدات يكتب إلى مجلد فرعي مشترك. رجاءً أعد النظر في خياراتك.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>ستتم مزامنة بعض الملفات كجزء من مجلدات قاعدة متعددة.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>لتجنب التعارضات، قم بإعداد مرشحات استبعاد بحيث يتم النظر في كل ملف محدث من قبل مجلد أساسي واحد فقط.</target>
+
+<source>Versioning folder:</source>
+<target>مجلد الإصدار:</target>
+
+<source>Base folder:</source>
+<target>المجلد الأساس:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>سيتم مزامنة مجلد الإصدار لأنه موجود في المجلد الأساس.</target>
<source>Synchronizing folder pair:</source>
<target>مزامنة زوج مجلدات:</target>
@@ -683,6 +742,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>إنشاء قاعدة بيانات...</target>
+<source>Loading...</source>
+<target>تحميل...</target>
+
<source>job name</source>
<target>اسم المهمة</target>
@@ -810,15 +872,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>الرجاء تحديد مجلد على نظام الملفات المحلي، الشبكة أو جهاز MTP.</target>
-<source>SFTP folder</source>
-<target>مجلد SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>اختر مجلد SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>اختيار نوع مجلد بديل</target>
-
<source>&New</source>
<target>&جديد</target>
@@ -864,11 +917,8 @@ The command is triggered if:
<source>&Tools</source>
<target>أ&دوات</target>
-<source>&Check for new version</source>
-<target>ال&تحقق من وجود نسخة جديدة</target>
-
-<source>&Check now</source>
-<target>&تحقق الآن</target>
+<source>&Check for updates now</source>
+<target>&تحقق من وجود تحديثات الآن</target>
<source>Check &automatically once a week</source>
<target>&تحقق أوتوماتيكياً بشكل أسبوعي</target>
@@ -888,6 +938,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>إزالة زوج مجلدات</target>
+<source>Access online storage</source>
+<target>الوصول إلى التخزين عبر الإنترنت</target>
+
<source>Swap sides</source>
<target>مبادلة الجانبين</target>
@@ -897,6 +950,9 @@ The command is triggered if:
<source>Find:</source>
<target>بحث:</target>
+<source>Match case</source>
+<target>مطابقة الحالة</target>
+
<source>New</source>
<target>جديد</target>
@@ -972,9 +1028,6 @@ The command is triggered if:
<source>Include:</source>
<target>إدخال:</target>
-<source>Exclude:</source>
-<target>استثناء:</target>
-
<source>Show examples</source>
<target>إظهار أمثلة</target>
@@ -1058,8 +1111,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>ترتيب زوج المجلدات</target>
-<source>Enter your SFTP login details:</source>
-<target>أدخل تفاصيل دخول SFTP الخاصة بك:</target>
+<source>Enter your login details:</source>
+<target>أدخل تفاصيل تسجيل الدخول:</target>
+
+<source>Connection type:</source>
+<target>نوع الاتصال:</target>
<source>Server name or IP address:</source>
<target>اسم الخادم أو عنوان IP:</target>
@@ -1067,11 +1123,29 @@ The command is triggered if:
<source>Port:</source>
<target>المنفذ:</target>
+<source>Encryption:</source>
+<target>التشفير:</target>
+
+<source>&Disabled</source>
+<target>&معطل</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicit SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>المصادقة:</target>
+
+<source>&Password</source>
+<target>&كلمة المرو</target>
+
+<source>&Key file</source>
+<target>&ملف المفتاح</target>
+
<source>User name:</source>
<target>اسم المستخدم:</target>
-<source>Password:</source>
-<target>كلمة المرور:</target>
+<source>Private key file:</source>
+<target>ملف المفتاح الخاص:</target>
<source>&Show password</source>
<target>&إظهار كلمة المرور</target>
@@ -1079,6 +1153,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>المسار على الخادم:</target>
+<source>Performance improvements:</source>
+<target>تحسينات الأداء:</target>
+
+<source>How to get best performance?</source>
+<target>كيفية الحصول على أفضل أداء؟</target>
+
+<source>SSH connections for directory reading:</source>
+<target>اتصالات SSH لقراءة الدليل:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>النطاق المقترح: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>قنوات SFTP لكل اتصال:</target>
+
+<source>Detect server limit</source>
+<target>اكتشاف حد الخادم</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>اتصالان × 10 قنوات = 20 مرات قراءة الدليل أسرع</target>
+
<source>Select a directory on the server:</source>
<target>تحديد دليل على الخادم:</target>
@@ -1208,6 +1303,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>الرماز المصدري مكتوب بلغة C++‎ باستخدام:</target>
+<source>Donation details</source>
+<target>تفاصيل التبرع</target>
+
<source>If you like FreeFileSync:</source>
<target>إذا أعجبك FreeFileSync:</target>
@@ -1217,7 +1315,7 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>التعليقات و الاقتراحات موضع ترحيب</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>الصفحة الرئيسية</target>
<source>Email</source>
@@ -1229,8 +1327,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>شكرا جزيلا للترجمة:</target>
-<source>SSH File Transfer Protocol</source>
-<target>بروتوكول نقل الملفات SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>قم بتنشيط FreeFileSync Donation Edition بإحدى الطرق التالية:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. تنشيط عبر الإنترنت الآن:</target>
+
+<source>Activate online</source>
+<target>التنشيط عبر الإنترنت</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. استرداد مفتاح تنشيط دون اتصال من الرابط التالي:</target>
+
+<source>&Copy to clipboard</source>
+<target>&نسخ من الذاكرة</target>
+
+<source>Enter activation key:</source>
+<target>أدخل مفتاح التنشيط:</target>
+
+<source>Activate offline</source>
+<target>تنشيط دون اتصال</target>
<source>Save as Batch Job</source>
<target>حفظ كمهمة دفعية</target>
@@ -1247,6 +1363,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>اختيار المطال الزمني</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&خيارات</target>
@@ -1268,8 +1387,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>نظرة عامة</target>
-<source>&Download</source>
-<target>&تنزيل</target>
+<source>&Show details</source>
+<target>&عرض التفاصيل</target>
<source>A new version of FreeFileSync is available:</source>
<target>يتوفر إصدار جديد من FreeFileSync:</target>
@@ -1524,8 +1643,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>السجل</target>
-<source>Loading...</source>
-<target>تحميل...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>ملفات التثبيت تالفة. الرجاء إعادة تثبيت FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>شكرا لك، %x, للتبرع والدعم.</target>
+
+<source>Password:</source>
+<target>كلمة المرور:</target>
+
+<source>Key password:</source>
+<target>كلمة المرور الرئيسية:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1584,6 +1712,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Parent folder path</source>
<target>مسار المجلد الحاوي</target>
+<source>Temporary local copy for SFTP and MTP storage</source>
+<target>نسخة محلية مؤقتة لتخزين SFTP و MTP</target>
+
<source>Parameters for opposite side</source>
<target>معلمات الجانب المعاكس</target>
@@ -1593,6 +1724,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&إظهار</target>
+<source>Downloading update...</source>
+<target>جار تحميل التحديث...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>التعرف على الملفات المتساوية عن طريق مقارنة التاريخ و الحجم.</target>
@@ -1686,12 +1820,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>النسبة المئوية</target>
+<source>Failed to retrieve update information.</source>
+<target>فشل استرداد معلومات التحديث.</target>
+
+<source>Automatic updates:</source>
+<target>التحديثات التلقائية:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>يتطلب FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>تفقد وجود تحديثات للبرنامج</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>التحديث التلقائي الآن أو تحميل يدويا من الصفحة الرئيسية لـ FreeFileSync؟</target>
+
+<source>&Auto-update</source>
+<target>&تحديث تلقائي</target>
+
+<source>&Home page</source>
+<target>&الصفحة الرئيسية</target>
+
<source>Download now?</source>
<target>تنزيل الآن؟</target>
+<source>&Download</source>
+<target>&تنزيل</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync بأحدث إصدار بالفعل.</target>
@@ -1704,14 +1859,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>فشل فحص التناسق لـ %x.</target>
-<source>Cannot find system function %x.</source>
-<target>لا يمكن العثور على وظيفة نظام %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>تم تسجيل التثبيت على نظام تشغيل مختلف.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>فشل تفعيل FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>مفتاح التفعيل غير صحيح.</target>
<source>Unable to register to receive system messages.</source>
<target>تعذر التسجيل لاستقبال رسائل النظام.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>ملفات التثبيت تالفة. يرجى إعادة تثبيت FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>لا يمكن العثور على وظيفة نظام %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>تعذر تسجيل تنبيهات الجهاز لـ %x.</target>
@@ -1743,9 +1904,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>لا يمكن نسخ السمات من %x إلى %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>نوع العنصر %x غير مدعوم:</target>
-
<source>%x TB</source>
<target>‎%x TB</target>
@@ -1800,9 +1958,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot change process I/O priorities.</source>
<target>تعذر تغيير أولويات I/O للعملية.</target>
-<source>Error Code %x:</source>
-<target>خطأ رقم %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>فشل تصفح سلة المهملات من أجل الملف %x.</target>
@@ -1812,9 +1967,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>ملف التكوين %x غير مكتمل. سيتم إعادة تعيين العناصر المفقودة إلى قيمها الافتراضية.</target>
-<source>Internet access failed.</source>
-<target>فشل الوصول إلى الإنترنت.</target>
-
<source>Prepare installation</source>
<target>الاستعداد للتثبيت</target>
@@ -1884,18 +2036,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>تعديل بواسطة FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>شكرا على تبرعك ودعمك !</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>بلغ هذا المثبت لـ FreeFileSync للمتبرعين حد التركيب اليومي له.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>تنزيل النسخة العادية من موقع FreeFileSync الآن ؟</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>النسخة المحمولة لا يمكن تثبيتها في المجلد المحدد.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>الرجاء اختيار نوع التثبيت المحلي أو اختيار مجلد آخر للتثبيت.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>وضع التثبيت الصامت متوفر فقط في FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/bulgarian.lng b/FreeFileSync/Build/Languages/bulgarian.lng
index f3c6812d..9e4160b1 100755
--- a/FreeFileSync/Build/Languages/bulgarian.lng
+++ b/FreeFileSync/Build/Languages/bulgarian.lng
@@ -8,7 +8,7 @@
</header>
<source>Both sides have changed since last synchronization.</source>
-<target>Двете страни имат промени след последната синхронизация.</target>
+<target>Двете страни са променени след последната синхронизация.</target>
<source>Cannot determine sync-direction:</source>
<target>Не може да определи посоката на синхронизация:</target>
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Задава подразбирани посоки на синхронизация: старите файлове ще се заменят с по-нови.</target>
-<source>Creating folder %x</source>
-<target>Създава папка %x</target>
-
<source>Creating file %x</source>
<target>Създава файл %x</target>
+<source>Creating folder %x</source>
+<target>Създава папка %x</target>
+
<source>Creating symbolic link %x</source>
<target>Създава символна връзка %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Ако тази грешка се игнорира, папките се считат празни. Липсващи папки се създават автоматично при нужда.</target>
-<source>A folder input field is empty.</source>
-<target>Полето за въведена папка е празно.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Съответната папка ще се счита празна.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Пътищата до следните папки са взаимозависими:</target>
-
<source>File %x has an invalid date.</source>
<target>Файл %x има невалидна дата.</target>
<source>Date:</source>
<target>Дата:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Файлове %x имат еднаква дата, но различни размери.</target>
+<source>Files have the same date but a different size.</source>
+<target>Файловете имат еднаква дата, но различни размери.</target>
<source>Size:</source>
<target>Размер:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Прескочено е сравняването на съдържанието за изключените файлове %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Сравняването на съдържанието е прескочено за изключените файлове.</target>
<source>Items differ in attributes only</source>
<target>Елементите се различават само по атрибути</target>
@@ -155,10 +146,10 @@
<target>Надеждно копиране на файлове</target>
<source>Enabled</source>
-<target>Активирано</target>
+<target>Активно</target>
<source>Disabled</source>
-<target>Неактивирано</target>
+<target>Неактивно</target>
<source>Copy locked files</source>
<target>Копирай заключени файлове</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Започва сравняване</target>
+<source>A folder input field is empty.</source>
+<target>Полето за въведена папка е празно.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Съответната папка ще се счита празна.</target>
+
+<source>Exclude:</source>
+<target>Изключи:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Една базова папка от двойка папки се съдържа в другата.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Папката трябва да се изключи от синхронизация чрез филтър.</target>
+
<source>Calculating sync directions...</source>
<target>Пресмята посоките на синхронизация...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Актуализирай атрибутите на десния елемент</target>
-<source>Cannot write permissions of %x.</source>
-<target>Не може да запише правата за достъп на %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Операцията не се поддържа за различни типове основни папки.</target>
-
<source>Cannot write file %x.</source>
<target>Не може да запише файл %x.</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
Действителни: %y байта
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Не може да запише правата за достъп на %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Операцията не се поддържа за различни типове основни папки.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Не може да копира символната връзка %x в %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Не може да премести файл %x в %y.</target>
-<source>Cannot enumerate directory %x.</source>
+<source>Unable to connect to %x.</source>
+<target>Не може да се свърже със %x.</target>
+
+<source>Failed to get information about server %x.</source>
+<target>Не може да получи информация за сървъра %x.</target>
+
+<source>Cannot open directory %x.</source>
+<target>Не може да отвори директория %x.</target>
+
+<source>Cannot read directory %x.</source>
<target>Не може да прочете директория %x.</target>
<source>Cannot read file attributes of %x.</source>
<target>Не може да прочете атрибутите на файл %x.</target>
-<source>Cannot find %x.</source>
-<target>Не е намерен %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Не може да отвори файл %x.</target>
-
<source>Cannot read file %x.</source>
<target>Не може да прочете файл %x.</target>
-<source>Cannot find device %x.</source>
-<target>Не е намерено устройство %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Не може да създаде директория %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Не може да изтрие директория %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Не може да изтрие файл %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Не може да изтрие директория %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Не може да запише времето на промяна на %x.</target>
@@ -309,23 +315,65 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Не може да проследи символната връзка %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Не може да отвори директория %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Не може да премести %x в кошчето.</target>
+
+<source>Cannot open file %x.</source>
+<target>Не може да отвори файл %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Не е намерено устройство %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Не е намерен %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Типа на елемент %x не се поддържа:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Не може да изтрие символната връзка %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Не може да определи свободното дисково пространство за %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Не може да премести %x в кошчето.</target>
-
<source>Incorrect command line:</source>
<target>Невалиден команден ред:</target>
-<source>Error Code %x:</source>
-<target>Код на грешка %x:</target>
+<source>Error Code %x</source>
+<target>Код на грешка %x</target>
-<source>Unable to connect to %x.</source>
-<target>Не може да се свърже към %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Сървърът не поддържа идентификация чрез %x.</target>
+
+<source>Required:</source>
+<target>Необходимо:</target>
+
+<source>Unable to access %x.</source>
+<target>Няма достъп до %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Времето на операцията изтича след 1 секунда.</pluralform>
+<pluralform>Времето на операцията изтича след %x секунди.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Не може да чака за повече от 1 връзка едновременно.</pluralform>
+<pluralform>Не може да чака за повече от %x връзки едновременно.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Активни връзки: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Не може да отвори SFTP-канал номер %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -349,19 +397,25 @@ Actual: %y bytes
<target>Не може да зареди файл %x.</target>
<source>Database file %x is incompatible.</source>
-<target>Файлът с база данни %x е несъвместим.</target>
+<target>Базата данни %x е несъвместима.</target>
<source>Initial synchronization:</source>
<target>Начална синхронизация:</target>
<source>Database file %x does not yet exist.</source>
-<target>Файлът с база данни %x още не съществува.</target>
+<target>Базата данни %x още не съществува.</target>
+
+<source>Database file is corrupted:</source>
+<target>Базата данни е повредена:</target>
-<source>Database file is corrupt:</source>
-<target>Файлът с база данни е повреден:</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Базите данни още не съдържат информация за последната синхронизация.</target>
-<source>Database files do not share a common session.</source>
-<target>Файловете с бази данни не споделят обща сесия.</target>
+<source>Loading file %x...</source>
+<target>Зарежда файл %x...</target>
+
+<source>Saving file %x...</source>
+<target>Запазва файл %x...</target>
<source>Searching for folder %x...</source>
<target>Търси папка %x...</target>
@@ -388,10 +442,7 @@ Actual: %y bytes
</target>
<source>Detecting abandoned lock...</source>
-<target>Намира изоставено заключване...</target>
-
-<source>Saving file %x...</source>
-<target>Запазва файл %x...</target>
+<target>Открива изоставено заключване...</target>
<source>Items processed:</source>
<target>Обработени елементи:</target>
@@ -466,7 +517,7 @@ Actual: %y bytes
<target>&Отвори...</target>
<source>Save &as...</source>
-<target>Запази к&ато...</target>
+<target>Запази &като...</target>
<source>E&xit</source>
<target>И&зход</target>
@@ -475,13 +526,13 @@ Actual: %y bytes
<target>&Файл</target>
<source>&View help</source>
-<target>Помо&щ</target>
+<target>&Помощ</target>
<source>&About</source>
-<target>Отно&сно</target>
+<target>&Относно</target>
<source>&Help</source>
-<target>Помо&щ</target>
+<target>&Помощ</target>
<source>Usage:</source>
<target>Употреба:</target>
@@ -555,16 +606,16 @@ The command is triggered if:
<target>Изчаква достъпност на всички директории...</target>
<source>&Restore</source>
-<target>Въ&зстановяване</target>
+<target>&Възстановяване</target>
<source>&Show error</source>
-<target>Покажи гре&шката</target>
+<target>&Покажи грешката</target>
<source>&Quit</source>
-<target>Кра&й</target>
+<target>&Край</target>
<source>&Retry</source>
-<target>Пов&торение</target>
+<target>&Повтори</target>
<source>File time and size</source>
<target>Дата и размер на файла</target>
@@ -576,13 +627,13 @@ The command is triggered if:
<target>Размер на файла</target>
<source>Two way</source>
-<target>Двупосочна</target>
+<target>Двупосочно</target>
<source>Mirror</source>
-<target>Огледална</target>
+<target>Огледално</target>
<source>Update</source>
-<target>Актуализация</target>
+<target>Актуализирай</target>
<source>Custom</source>
<target>По избор</target>
@@ -647,14 +698,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Недостатъчно свободно дисково пространство в:</target>
-<source>Required:</source>
-<target>Необходимо:</target>
-
<source>Available:</source>
<target>Налично:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Много двойки папки записват в обща под-папка. Моля, проверете конфигурацията.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Някои файлове ще бъдат синхронизирани като част от повече базови папки.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>За избягване на конфликти задайте изключващи филтри, тъй че всеки актуализиран файл да се следи само от една базова папка.</target>
+
+<source>Versioning folder:</source>
+<target>Папка за версии:</target>
+
+<source>Base folder:</source>
+<target>Базова папка:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Папката за версии ще бъде синхронизирана, понеже се съдържа в базовата папка.</target>
<source>Synchronizing folder pair:</source>
<target>Синхронизация на двойка папки:</target>
@@ -662,6 +722,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Създава база данни...</target>
+<source>Loading...</source>
+<target>Зареждане...</target>
+
<source>job name</source>
<target>име на задачата</target>
@@ -669,7 +732,7 @@ The command is triggered if:
<target>Синхронизацията е спряна</target>
<source>Stopped</source>
-<target>Стопирано</target>
+<target>Спряно</target>
<source>Synchronization completed with errors</source>
<target>Синхронизацията завърши с грешки</target>
@@ -693,13 +756,13 @@ The command is triggered if:
<target>За решение на този проблем идете на главното меню на FreeFileSync.</target>
<source>&Don't show this warning again</source>
-<target>Не показвай ве&че това предупреждение</target>
+<target>&Не показвай вече това предупреждение</target>
<source>&Ignore</source>
-<target>И&гнорирай</target>
+<target>&Игнорирай</target>
<source>&Switch</source>
-<target>Превкл&ючи</target>
+<target>&Превключи</target>
<source>Switching to FreeFileSync's main window</source>
<target>Иди на главното меню на FreeFileSync</target>
@@ -714,7 +777,7 @@ The command is triggered if:
</target>
<source>&Ignore subsequent errors</source>
-<target>Игнорирай сле&дващите грешки</target>
+<target>&Игнорирай следващите грешки</target>
<source>Retrying operation...</source>
<target>Повтаря операцията...</target>
@@ -785,15 +848,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Моля, изберете папка от локална файлова система, мрежа или MTP-устройство.</target>
-<source>SFTP folder</source>
-<target>SFTP-папка</target>
-
-<source>Select SFTP folder</source>
-<target>Изберете SFTP-папка</target>
-
-<source>Select alternative folder type</source>
-<target>Изберете алтернативен тип папка</target>
-
<source>&New</source>
<target>&Нов</target>
@@ -807,16 +861,16 @@ The command is triggered if:
<target>Почни &сравняване</target>
<source>C&omparison settings</source>
-<target>Настройки на с&равняване</target>
+<target>Н&астройки на сравняване</target>
<source>&Filter settings</source>
-<target>&Настройки на филтъра</target>
+<target>Настройки на &филтъра</target>
<source>S&ynchronization settings</source>
-<target>Настройки на с&инхронизация</target>
+<target>Настройки на с&инхронизиране</target>
<source>Start &synchronization</source>
-<target>Почни &синхронизация</target>
+<target>Почни &синхронизиране</target>
<source>&Actions</source>
<target>&Действия</target>
@@ -837,43 +891,43 @@ The command is triggered if:
<target>&Експортирай файловия списък...</target>
<source>&Tools</source>
-<target>Инстр&ументи</target>
-
-<source>&Check for new version</source>
-<target>&Провери за нова версия</target>
+<target>&Инструменти</target>
-<source>&Check now</source>
-<target>&Веднага</target>
+<source>&Check for updates now</source>
+<target>&Провери за обновления веднага</target>
<source>Check &automatically once a week</source>
-<target>Веднъж седмично &автоматично</target>
+<target>Автоматично веднъж &седмично</target>
<source>Cancel</source>
<target>Отказ</target>
<source>Compare</source>
-<target>Сравняване</target>
+<target>Сравни</target>
<source>Synchronize</source>
-<target>Синхронизация</target>
+<target>Синхронизирай</target>
<source>Add folder pair</source>
-<target>Добавяне на двойка папки</target>
+<target>Добави двойка папки</target>
<source>Remove folder pair</source>
-<target>Отнемане на двойка папки</target>
+<target>Отнеми двойка папки</target>
+
+<source>Access online storage</source>
+<target>Достъп до онлайн съхранение</target>
<source>Swap sides</source>
-<target>Размяна на страните</target>
+<target>Размени страните</target>
<source>Close search bar</source>
-<target>Затвори лентата за търсене</target>
+<target>Затвори полето за търсене</target>
<source>Find:</source>
-<target>Намери:</target>
+<target>Търси:</target>
<source>Match case</source>
-<target>Спазвай регистъра</target>
+<target>Точно съвпадение</target>
<source>New</source>
<target>Нова</target>
@@ -888,10 +942,10 @@ The command is triggered if:
<target>Запази като...</target>
<source>View type:</source>
-<target>Тип на изгледа:</target>
+<target>Тип изглед:</target>
<source>Select view:</source>
-<target>Избор на изгледа:</target>
+<target>Избери изглед:</target>
<source>Statistics:</source>
<target>Статистика:</target>
@@ -942,7 +996,7 @@ The command is triggered if:
<target>Пример:</target>
<source>Handle daylight saving time</source>
-<target>Отчитай лятното време</target>
+<target>Отчети лятното време</target>
<source>Local settings:</source>
<target>Локални настройки:</target>
@@ -950,9 +1004,6 @@ The command is triggered if:
<source>Include:</source>
<target>Включи:</target>
-<source>Exclude:</source>
-<target>Изключи:</target>
-
<source>Show examples</source>
<target>Примери</target>
@@ -975,7 +1026,7 @@ The command is triggered if:
<target>И&зчисти</target>
<source>Detect synchronization directions with the help of database files</source>
-<target>Открий посоката на синхронизация чрез файловете на базата данни</target>
+<target>Открий посоката на синхронизация чрез файловете бази данни</target>
<source>Detect moved files</source>
<target>Откриване на преместени файлове</target>
@@ -987,7 +1038,7 @@ The command is triggered if:
</source>
<target>
- Не се поддържа от всички файлови системи,
-- Изисква и създава файлове с бази данни,
+- Изисква и създава файлове бази данни,
- Няма откриване при първа синхронизация.
</target>
@@ -1036,8 +1087,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Подреди двойката папки</target>
-<source>Enter your SFTP login details:</source>
-<target>Въведете данните си за SFTP-логване:</target>
+<source>Enter your login details:</source>
+<target>Въведете входните си данни:</target>
+
+<source>Connection type:</source>
+<target>Тип на връзката:</target>
<source>Server name or IP address:</source>
<target>Име на сървъра или IP-адрес:</target>
@@ -1045,11 +1099,29 @@ The command is triggered if:
<source>Port:</source>
<target>Порт:</target>
+<source>Encryption:</source>
+<target>Криптиране:</target>
+
+<source>&Disabled</source>
+<target>&Неактивно</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Експлицитен SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Идентификация:</target>
+
+<source>&Password</source>
+<target>&Парола</target>
+
+<source>&Key file</source>
+<target>&Кодов файл</target>
+
<source>User name:</source>
<target>Потребителско име:</target>
-<source>Password:</source>
-<target>Парола:</target>
+<source>Private key file:</source>
+<target>Личен кодов файл:</target>
<source>&Show password</source>
<target>&Покажи паролата</target>
@@ -1057,6 +1129,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>Директория на сървъра:</target>
+<source>Performance improvements:</source>
+<target>Подобряване на работата:</target>
+
+<source>How to get best performance?</source>
+<target>Как да се получи най-добра работа?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH-връзки за четене на директории:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Предлаган диапазон: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP-канали за една връзка:</target>
+
+<source>Detect server limit</source>
+<target>Открий лимита на сървъра</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 връзки x 10 канала = 20 пъти по-бързо четене на директории</target>
+
<source>Select a directory on the server:</source>
<target>Изберете директория на сървъра:</target>
@@ -1064,16 +1157,16 @@ The command is triggered if:
<target>Изберете папка</target>
<source>Start synchronization now?</source>
-<target>Почни синхронизация веднага?</target>
+<target>Синхронизирай веднага?</target>
<source>Variant:</source>
<target>Вариант:</target>
<source>&Don't show this dialog again</source>
-<target>&Не показвай вече този диалог</target>
+<target>&Не показвай повече този диалог</target>
<source>Items found:</source>
-<target>Намерени елементи:</target>
+<target>Открити елементи:</target>
<source>Time remaining:</source>
<target>Оставащо време:</target>
@@ -1100,13 +1193,13 @@ The command is triggered if:
<target>Затвори</target>
<source>&Pause</source>
-<target>Па&уза</target>
+<target>&Пауза</target>
<source>Stop</source>
<target>Стоп</target>
<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source>
-<target>Създаване на пакетен файл за автоматична синхронизация. За старт щракнете двукратно върху този файл или задайте планова задача: %x</target>
+<target>Създаване на пакетен файл за автоматична синхронизация. За старт двукратно щракнете върху този файл или задайте планова задача: %x</target>
<source>&Stop</source>
<target>&Стоп</target>
@@ -1127,7 +1220,7 @@ The command is triggered if:
<target>Ограничи максималния брой протоколни файлове</target>
<source>How can I schedule a batch job?</source>
-<target>Как се планира пакетна задача?</target>
+<target>Как да се планира пакетна задача?</target>
<source>&Keep relative paths</source>
<target>&Запази относителните пътища</target>
@@ -1175,10 +1268,10 @@ This guarantees a consistent state even in case of a serious error.
<target>Описание</target>
<source>Show hidden dialogs again</source>
-<target>Покажи отново скритите диалози</target>
+<target>Покажи скритите диалози отново</target>
<source>Show all permanently hidden dialogs and warning messages again</source>
-<target>Покажи отново всички постоянно скрити диалози и предупреждения</target>
+<target>Покажи всички постоянно скрити диалози и предупреждения отново</target>
<source>&Default</source>
<target>&По подразбиране</target>
@@ -1186,6 +1279,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Изходния код е написан на C++ със:</target>
+<source>Donation details</source>
+<target>Подробности за дарителство</target>
+
<source>If you like FreeFileSync:</source>
<target>Ако харесвате FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Забележки и предложения са добре дошли</target>
-<source>Homepage</source>
-<target>Сайт</target>
+<source>Home page</source>
+<target>Домашна страница</target>
<source>Email</source>
<target>Ел.поща</target>
@@ -1207,8 +1303,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Благодарности за локализацията:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Активирайте FreeFileSync-Дарителско-Издание по един от следните методи:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Активиране по Интернет:</target>
+
+<source>Activate online</source>
+<target>Активирайте онлайн</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Вземете офлайн-активационен-код от следния адрес:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Копирайте в клипборда</target>
+
+<source>Enter activation key:</source>
+<target>Въведете активационния код:</target>
+
+<source>Activate offline</source>
+<target>Активирайте офлайн</target>
<source>Save as Batch Job</source>
<target>Запази като пакетна задача</target>
@@ -1225,6 +1339,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Избор на времеви интервал</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync-Дарителско-Издание</target>
+
<source>&Options</source>
<target>&Опции</target>
@@ -1235,7 +1352,7 @@ This guarantees a consistent state even in case of a serious error.
<target>Двойки папки</target>
<source>Find</source>
-<target>Намиране</target>
+<target>Намери</target>
<source>View Settings</source>
<target>Настройки на изгледа</target>
@@ -1244,19 +1361,19 @@ This guarantees a consistent state even in case of a serious error.
<target>Конфигурация</target>
<source>Overview</source>
-<target>Обзор</target>
+<target>Преглед</target>
-<source>&Download</source>
-<target>Свал&яне</target>
+<source>&Show details</source>
+<target>&Покажи подробно</target>
<source>A new version of FreeFileSync is available:</source>
-<target>Има нова версия на FreeFileSync:</target>
+<target>FreeFileSync има нова версия:</target>
<source>Local path not available for %x.</source>
-<target>Не е наличен локален път за %x.</target>
+<target>Няма наличен локален път за %x.</target>
<source>Confirm</source>
-<target>Потвърждение</target>
+<target>Потвърди</target>
<source>
<pluralform>Do you really want to execute the command %y for one item?</pluralform>
@@ -1361,7 +1478,7 @@ This guarantees a consistent state even in case of a serious error.
<target>Ще запазите ли промените на %x?</target>
<source>Never save &changes</source>
-<target>&Не запазвай никога промените</target>
+<target>Не запазвай &промените никога</target>
<source>Do&n't save</source>
<target>&Не запазвай</target>
@@ -1486,8 +1603,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Протокол</target>
-<source>Loading...</source>
-<target>Зареждане...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Инсталационните файлове са повредени. Моля, преинсталирайте FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>%x, благодарности за Вашето дарение и подкрепа!</target>
+
+<source>Password:</source>
+<target>Парола:</target>
+
+<source>Key password:</source>
+<target>Кодова фраза:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1541,11 +1667,14 @@ This guarantees a consistent state even in case of a serious error.
<target>Параметри за срещуположната страна</target>
<source>Show hidden dialogs and warning messages again?</source>
-<target>Да покажа ли пак скритите диалози и предупреждения?</target>
+<target>Да покажа ли скритите диалози и предупреждения отново?</target>
<source>&Show</source>
<target>&Покажи</target>
+<source>Downloading update...</source>
+<target>Сваляне на актуализация...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Определяне на еднакви файлове, сравнявайки времето на промяна и размера.</target>
@@ -1574,7 +1703,7 @@ This guarantees a consistent state even in case of a serious error.
<target>Сравняване</target>
<source>Synchronization</source>
-<target>Синхронизация</target>
+<target>Синхронизиране</target>
<source>Today</source>
<target>Днес</target>
@@ -1616,7 +1745,7 @@ This guarantees a consistent state even in case of a serious error.
<target>Главна конфигурация</target>
<source>empty</source>
-<target>empty</target>
+<target>празно</target>
<source>Leave as unresolved conflict</source>
<target>Остави като нерешен конфликт</target>
@@ -1639,32 +1768,59 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Процент</target>
+<source>Failed to retrieve update information.</source>
+<target>Не е получена информация за актуализации.</target>
+
+<source>Automatic updates:</source>
+<target>Автоматично актуализиране:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Изисква FreeFileSync Дарителско Издание</target>
+
<source>Check for Program Updates</source>
<target>Проверка за нова версия на програмата</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Автоматично актуализиране веднага или ръчно сваляне от домашната страница на FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Автоматично актуализиране</target>
+
+<source>&Home page</source>
+<target>&Домашна страница</target>
+
<source>Download now?</source>
<target>Свали веднага?</target>
+<source>&Download</source>
+<target>&Сваляне</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync вече е актуална.</target>
<source>Cannot find current FreeFileSync version number online. A newer version is likely available. Check manually now?</source>
-<target>Онлайн-номера на текущата FreeFileSync-версия не е открит. Изглежда има по-нова версия. Ще опитате ли ръчно сега?</target>
+<target>Онлайн-номера на текущата FreeFileSync-версия не е открит. Изглежда има по-нова версия. Ще опитате ли ръчно?</target>
<source>&Check</source>
-<target>Оп&итай</target>
+<target>&Опитай</target>
<source>Consistency check failed for %x.</source>
<target>Неуспешна проверка за съвместимост на %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Не е намерена системната функция %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Инсталацията е регистрирана на различна операционна система.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Не може да активира FreeFileSync-Дарителско-Издание.</target>
+
+<source>Incorrect activation key.</source>
+<target>Неверен активационен код.</target>
<source>Unable to register to receive system messages.</source>
<target>Невъзможна регистрация за получаване на системни съобщения.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Инсталационните файлове са повредени. Моля, преинсталирайте FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Не е намерена системната функция %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Не се регистрират съобщенията на устройство %x.</target>
@@ -1696,9 +1852,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Не може да копира атрибутите от %x в %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Типа на елемент %x не се поддържа:</target>
-
<source>%x TB</source>
<target>%x ТБ</target>
@@ -1750,9 +1903,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Конфигурационният файл %x е непълен. Ще бъдат зададени подразбирани стойности за липсващите елементи.</target>
-<source>Internet access failed.</source>
-<target>Няма достъп до Интернет.</target>
-
<source>Prepare installation</source>
<target>Подготовка за инсталиране</target>
@@ -1822,18 +1972,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Редактиране с FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Благодарности за Вашите дарения и подкрепа!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Този FreeFileSync-инсталатор за донори изчерпа дневния си лимит за инсталации.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Сваляне на регулярната версия от страницата на FreeFileSync сега?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Преносимата версия не може да се инсталира в избраната папка.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Моля, изберете локален тип инсталация или пък друга папка за инсталация.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Режим на мълчаливо инсталиране е възможен само за FreeFileSync-Дарителско-Издание.</target>
+
diff --git a/FreeFileSync/Build/Languages/chinese_simple.lng b/FreeFileSync/Build/Languages/chinese_simple.lng
index 2b3051ec..1aaf27ce 100755
--- a/FreeFileSync/Build/Languages/chinese_simple.lng
+++ b/FreeFileSync/Build/Languages/chinese_simple.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>设置默认的同步方向:旧文件会被新文件覆盖.</target>
-<source>Creating folder %x</source>
-<target>正创建文件夹 %x</target>
-
<source>Creating file %x</source>
<target>正在创建文件 %x</target>
+<source>Creating folder %x</source>
+<target>正创建文件夹 %x</target>
+
<source>Creating symbolic link %x</source>
<target>正在创建符号连接 %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>如果这个错误被忽略文件夹将被认为是空的. 当有必要时丢失的文件夹将会被创建.</target>
-<source>A folder input field is empty.</source>
-<target>有一个文件夹输入框为空.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>相应的文件夹将被视为空.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>如下的文件夹路径互相依赖:</target>
-
<source>File %x has an invalid date.</source>
<target>文件 %x 的日期非法.</target>
<source>Date:</source>
<target>日期:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>文件 %x 日期相同但大小不同.</target>
+<source>Files have the same date but a different size.</source>
+<target></target>
<source>Size:</source>
<target>大小:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>对于被排除的文件 %x 内容比较已跳过.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target></target>
<source>Items differ in attributes only</source>
<target>项目仅是文件属性不同</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>正在开始比较</target>
+<source>A folder input field is empty.</source>
+<target>有一个文件夹输入框为空.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>相应的文件夹将被视为空.</target>
+
+<source>Exclude:</source>
+<target>排除:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target></target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target></target>
+
<source>Calculating sync directions...</source>
<target>正在计算同步方向...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>更新右侧的文件属性</target>
-<source>Cannot write permissions of %x.</source>
-<target>无法写入 %x 的权限.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>对于不同基础文件夹方式此操作不被支持.</target>
-
<source>Cannot write file %x.</source>
<target>无法写入文件 %x .</target>
@@ -267,38 +267,44 @@ Actual: %y bytes
实际: %y 字节
</target>
+<source>Cannot write permissions of %x.</source>
+<target>无法写入 %x 的权限.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>对于不同基础文件夹方式此操作不被支持.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>无法复制符号连接 %x 到 %y.</target>
<source>Cannot move file %x to %y.</source>
<target>无法移动文件 %x 到 %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>无法列举目录 %x.</target>
+<source>Unable to connect to %x.</source>
+<target>无法连接到 %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>无法读取 %x 的文件属性.</target>
+<source>Failed to get information about server %x.</source>
+<target></target>
-<source>Cannot find %x.</source>
-<target>无法找到 %x.</target>
+<source>Cannot open directory %x.</source>
+<target>无法打开目录 %x.</target>
-<source>Cannot open file %x.</source>
-<target>无法打开文件 %x.</target>
+<source>Cannot read directory %x.</source>
+<target></target>
<source>Cannot read file %x.</source>
<target>无法读取文件 %x .</target>
-<source>Cannot find device %x.</source>
-<target>无法找到设备 %x.</target>
-
<source>Cannot create directory %x.</source>
<target>无法创建目录 %x.</target>
+<source>Cannot delete file %x.</source>
+<target>无法删除文件 %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>无法删除目录 %x.</target>
-<source>Cannot delete file %x.</source>
-<target>无法删除文件 %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>无法读取 %x 的文件属性.</target>
<source>Cannot write modification time of %x.</source>
<target>无法写入 %x 的最后修改时间.</target>
@@ -309,23 +315,59 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>无法解决符号连接 %x.</target>
-<source>Cannot open directory %x.</source>
-<target>无法打开目录 %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>无法将 %x 移动到回收站.</target>
+
+<source>Cannot open file %x.</source>
+<target>无法打开文件 %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>无法找到设备 %x.</target>
+
+<source>Cannot find %x.</source>
+<target>无法找到 %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>%x 的类型不被支持:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target></target>
<source>Cannot determine free disk space for %x.</source>
<target>无法确定 %x 上的可用磁盘空间.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>无法将 %x 移动到回收站.</target>
-
<source>Incorrect command line:</source>
<target>不正确的命令行:</target>
-<source>Error Code %x:</source>
-<target>错误代码 %x:</target>
+<source>Error Code %x</source>
+<target></target>
-<source>Unable to connect to %x.</source>
-<target>无法连接到 %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target></target>
+
+<source>Required:</source>
+<target>必需:</target>
+
+<source>Unable to access %x.</source>
+<target></target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target></target>
+
+<source>Active connections: %x</source>
+<target></target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target></target>
<source>
<pluralform>1 byte</pluralform>
@@ -356,11 +398,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>数据库文件 %x 还未存在.</target>
-<source>Database file is corrupt:</source>
-<target>数据库文件已损坏:</target>
+<source>Database file is corrupted:</source>
+<target></target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target></target>
-<source>Database files do not share a common session.</source>
-<target>数据库文件并未共享一个公共会话.</target>
+<source>Loading file %x...</source>
+<target></target>
+
+<source>Saving file %x...</source>
+<target>正在保存文件 %x...</target>
<source>Searching for folder %x...</source>
<target>正在搜索文件夹 %x...</target>
@@ -388,9 +436,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>正在检测被遗弃的锁定...</target>
-<source>Saving file %x...</source>
-<target>正在保存文件 %x...</target>
-
<source>Items processed:</source>
<target>已处理的项目:</target>
@@ -644,14 +689,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>没有足够的可用磁盘空间用于:</target>
-<source>Required:</source>
-<target>必需:</target>
-
<source>Available:</source>
<target>可用:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>多个文件夹对写入到一个公共的子文件夹. 请重新检查你的设置.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target></target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target></target>
+
+<source>Versioning folder:</source>
+<target></target>
+
+<source>Base folder:</source>
+<target></target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target></target>
<source>Synchronizing folder pair:</source>
<target>正在同步成对的文件夹:</target>
@@ -659,6 +713,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>正在生成数据库...</target>
+<source>Loading...</source>
+<target>正在载入...</target>
+
<source>job name</source>
<target>作业名称</target>
@@ -781,15 +838,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>请选择在本地文件系统, 网络或MTP设备上的文件夹.</target>
-<source>SFTP folder</source>
-<target>SFTP文件夹</target>
-
-<source>Select SFTP folder</source>
-<target>选择SFTP文件夹</target>
-
-<source>Select alternative folder type</source>
-<target>选择替代的文件夹类型</target>
-
<source>&New</source>
<target>新建(&N)</target>
@@ -835,11 +883,8 @@ The command is triggered if:
<source>&Tools</source>
<target>工具(&T)</target>
-<source>&Check for new version</source>
-<target>检查新版本(&C)</target>
-
-<source>&Check now</source>
-<target>现在检查(&C)</target>
+<source>&Check for updates now</source>
+<target></target>
<source>Check &automatically once a week</source>
<target>每周自动检查一次(&A)</target>
@@ -859,6 +904,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>移除文件夹对</target>
+<source>Access online storage</source>
+<target></target>
+
<source>Swap sides</source>
<target>两侧互换</target>
@@ -946,9 +994,6 @@ The command is triggered if:
<source>Include:</source>
<target>包括:</target>
-<source>Exclude:</source>
-<target>排除:</target>
-
<source>Show examples</source>
<target>显示范例</target>
@@ -1032,8 +1077,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>排列文件夹对</target>
-<source>Enter your SFTP login details:</source>
-<target>输入你的SFTP登录详情:</target>
+<source>Enter your login details:</source>
+<target></target>
+
+<source>Connection type:</source>
+<target></target>
<source>Server name or IP address:</source>
<target>服务器名称或IP地址:</target>
@@ -1041,11 +1089,29 @@ The command is triggered if:
<source>Port:</source>
<target>端口:</target>
+<source>Encryption:</source>
+<target></target>
+
+<source>&Disabled</source>
+<target></target>
+
+<source>&Explicit SSL/TLS</source>
+<target></target>
+
+<source>Authentication:</source>
+<target></target>
+
+<source>&Password</source>
+<target></target>
+
+<source>&Key file</source>
+<target></target>
+
<source>User name:</source>
<target>用户名:</target>
-<source>Password:</source>
-<target>密码:</target>
+<source>Private key file:</source>
+<target></target>
<source>&Show password</source>
<target>显示密码(&S)</target>
@@ -1053,6 +1119,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>服务器上的目录:</target>
+<source>Performance improvements:</source>
+<target></target>
+
+<source>How to get best performance?</source>
+<target></target>
+
+<source>SSH connections for directory reading:</source>
+<target></target>
+
+<source>Suggested range: [1 - 10]</source>
+<target></target>
+
+<source>SFTP channels per connection:</source>
+<target></target>
+
+<source>Detect server limit</source>
+<target></target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target></target>
+
<source>Select a directory on the server:</source>
<target>选择一个服务器上的目录:</target>
@@ -1179,6 +1266,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>源代码用如下C++工具写成:</target>
+<source>Donation details</source>
+<target></target>
+
<source>If you like FreeFileSync:</source>
<target>如果你喜欢 FreeFileSync:</target>
@@ -1188,8 +1278,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>欢迎反馈意见和提出建议</target>
-<source>Homepage</source>
-<target>主页</target>
+<source>Home page</source>
+<target></target>
<source>Email</source>
<target>邮箱</target>
@@ -1200,8 +1290,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>非常感谢以下本地化翻译者:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH文件传输协议</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target></target>
+
+<source>1. Activate via internet now:</source>
+<target></target>
+
+<source>Activate online</source>
+<target></target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target></target>
+
+<source>&Copy to clipboard</source>
+<target></target>
+
+<source>Enter activation key:</source>
+<target></target>
+
+<source>Activate offline</source>
+<target></target>
<source>Save as Batch Job</source>
<target>另存为批处理作业</target>
@@ -1218,6 +1326,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>选择时间跨度</target>
+<source>FreeFileSync Donation Edition</source>
+<target></target>
+
<source>&Options</source>
<target>选项(&O)</target>
@@ -1239,8 +1350,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>摘要</target>
-<source>&Download</source>
-<target>下载(&D)</target>
+<source>&Show details</source>
+<target></target>
<source>A new version of FreeFileSync is available:</source>
<target>已经有新版本的FreeFileSync可用:</target>
@@ -1475,8 +1586,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>日志</target>
-<source>Loading...</source>
-<target>正在载入...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target></target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target></target>
+
+<source>Password:</source>
+<target>密码:</target>
+
+<source>Key password:</source>
+<target></target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1532,6 +1652,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>显示(&S)</target>
+<source>Downloading update...</source>
+<target></target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>以比较修改时间和文件大小来识别相同文件.</target>
@@ -1625,12 +1748,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>百分比</target>
+<source>Failed to retrieve update information.</source>
+<target></target>
+
+<source>Automatic updates:</source>
+<target></target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target></target>
+
<source>Check for Program Updates</source>
<target>检查程序的更新</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target></target>
+
+<source>&Auto-update</source>
+<target></target>
+
+<source>&Home page</source>
+<target></target>
+
<source>Download now?</source>
<target>立即下载?</target>
+<source>&Download</source>
+<target>下载(&D)</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync 已是最新.</target>
@@ -1643,14 +1787,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>对于 %x 的一致性检测失败.</target>
-<source>Cannot find system function %x.</source>
-<target>无法找到系统功能 %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target></target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target></target>
+
+<source>Incorrect activation key.</source>
+<target></target>
<source>Unable to register to receive system messages.</source>
<target>无法注册以接收系统信息.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>安装文件损坏. 请重新安装FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>无法找到系统功能 %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>无法为 %x 注册设备通知.</target>
@@ -1682,9 +1832,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>无法从 %x 复制属性到 %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>%x 的类型不被支持:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1733,9 +1880,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>配置文件 %x 不完整. 丢失的元素将被设置为它们的默认值.</target>
-<source>Internet access failed.</source>
-<target>因特网接入失败.</target>
-
<source>Prepare installation</source>
<target>准备安装</target>
@@ -1805,18 +1949,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>使用FreeFileSync编辑</target>
-<source>Thanks for your donation and support!</source>
-<target>谢谢你的捐助和支持!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>这个用于捐助者的FreeFileSync安装程序已经达到每日安装上限.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>是否要马上从FreeFileSync网站下载普通版本?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>便携版本无法安装到选定的文件夹.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>请选择本地安装类型或选择用于安装的不同文件夹.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target></target>
+
diff --git a/FreeFileSync/Build/Languages/chinese_traditional.lng b/FreeFileSync/Build/Languages/chinese_traditional.lng
index 6211dcc4..fb5dcc2e 100755
--- a/FreeFileSync/Build/Languages/chinese_traditional.lng
+++ b/FreeFileSync/Build/Languages/chinese_traditional.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>設定預設同步方向:舊檔案會被較新的檔案覆蓋。</target>
-<source>Creating folder %x</source>
-<target>正在新建資料夾 %x</target>
-
<source>Creating file %x</source>
<target>正在新建檔案 %x</target>
+<source>Creating folder %x</source>
+<target>正在新建資料夾 %x</target>
+
<source>Creating symbolic link %x</source>
<target>正在新建符號連結 %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>如果忽略此錯誤的資料夾將視為空。在需要時會自動新建缺少的資料夾。</target>
-<source>A folder input field is empty.</source>
-<target>資料夾輸入欄位是空白。</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>對應的資料夾將視為空。</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>下列資料夾路徑是相互依賴:</target>
-
<source>File %x has an invalid date.</source>
<target>檔案 %x 的日期無效。</target>
<source>Date:</source>
<target>日期:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>檔案 %x 日期相同但大小不同。</target>
+<source>Files have the same date but a different size.</source>
+<target>檔案的日期相同但大小不同。</target>
<source>Size:</source>
<target>大小:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>內容比對已跳過排除檔案 %x。</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>內容比對被設定排除檔案跳過。</target>
<source>Items differ in attributes only</source>
<target>只有項目的屬性不同</target>
@@ -164,7 +155,7 @@
<target>複製被鎖定的檔案</target>
<source>Copy file access permissions</source>
-<target>複製檔存取權限</target>
+<target>複製檔案存取權限</target>
<source>File time tolerance</source>
<target>檔案時間差</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>開始比對</target>
+<source>A folder input field is empty.</source>
+<target>資料夾輸入欄位是空白。</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>對應的資料夾將視為空。</target>
+
+<source>Exclude:</source>
+<target>排除:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>一個基本資料夾中的配對資料夾包含在另一個中。</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>應該從同步透過篩選器中排除資料夾。</target>
+
<source>Calculating sync directions...</source>
<target>正在計算同步方向…</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>更新右邊的屬性</target>
-<source>Cannot write permissions of %x.</source>
-<target>無法寫入 %x 的權限。</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>不支援不同基本資料夾類型的操作。</target>
-
<source>Cannot write file %x.</source>
<target>無法寫入檔案 %x。</target>
@@ -267,37 +267,43 @@ Actual: %y bytes
實際:%y 位元組
</target>
+<source>Cannot write permissions of %x.</source>
+<target>無法寫入 %x 的權限。</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>不支援不同基本資料夾類型的操作。</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>無法複製符號連結 %x 到 %y。</target>
<source>Cannot move file %x to %y.</source>
<target>無法移動檔案 %x 到 %y。</target>
-<source>Cannot enumerate directory %x.</source>
-<target>無法枚舉目錄 %x。</target>
+<source>Unable to connect to %x.</source>
+<target>無法連接到 %x。</target>
-<source>Cannot read file attributes of %x.</source>
-<target>無法讀取 %x 的檔案屬性。</target>
+<source>Failed to get information about server %x.</source>
+<target>無法獲取有關伺服器 %x 的資訊。</target>
-<source>Cannot find %x.</source>
-<target>找不到 %x。</target>
+<source>Cannot open directory %x.</source>
+<target>無法開啟目錄 %x。</target>
-<source>Cannot open file %x.</source>
-<target>無法開啟檔案 %x。</target>
+<source>Cannot read directory %x.</source>
+<target>無法讀取目錄 %x。</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>無法讀取 %x 的檔案屬性。</target>
<source>Cannot read file %x.</source>
<target>無法讀取檔案 %x。</target>
-<source>Cannot find device %x.</source>
-<target>找不到裝置 %x。</target>
-
<source>Cannot create directory %x.</source>
<target>無法新建目錄 %x。</target>
-<source>Cannot delete directory %x.</source>
+<source>Cannot delete file %x.</source>
<target>無法刪除目錄 %x。</target>
-<source>Cannot delete file %x.</source>
+<source>Cannot delete directory %x.</source>
<target>無法刪除目錄 %x。</target>
<source>Cannot write modification time of %x.</source>
@@ -309,23 +315,63 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>無法解析符號連結 %x。</target>
-<source>Cannot open directory %x.</source>
-<target>無法開啟目錄 %x。</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>無法將 %x 移動到資源回收筒。</target>
+
+<source>Cannot open file %x.</source>
+<target>無法開啟檔案 %x。</target>
+
+<source>Cannot find device %x.</source>
+<target>找不到裝置 %x。</target>
+
+<source>Cannot find %x.</source>
+<target>找不到 %x。</target>
+
+<source>Type of item %x is not supported:</source>
+<target>項目類型 %x 不被支援:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>無法刪除符號連結 %x。</target>
<source>Cannot determine free disk space for %x.</source>
<target>無法確定 %x 的可用磁碟空間。</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>無法將 %x 移動到資源回收筒。</target>
-
<source>Incorrect command line:</source>
<target>不正確的命令列:</target>
-<source>Error Code %x:</source>
-<target>錯誤代碼 %x:</target>
+<source>Error Code %x</source>
+<target>錯誤代碼 %x</target>
-<source>Unable to connect to %x.</source>
-<target>無法連接到 %x。</target>
+<source>The server does not support authentication via %x.</source>
+<target>伺服器不支援透過 %x 進行身份驗證。</target>
+
+<source>Required:</source>
+<target>必要:</target>
+
+<source>Unable to access %x.</source>
+<target>無法存取 %x。</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>操作在 %x 秒後超時。</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>無法一次等待超過 %x 個連接數。</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>活動連接數:%x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>無法開啟SFTP通道號 %x。</target>
<source>
<pluralform>1 byte</pluralform>
@@ -356,11 +402,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>資料庫檔案 %x 並不存在。</target>
-<source>Database file is corrupt:</source>
-<target>資料庫檔案已損毀:</target>
+<source>Database file is corrupted:</source>
+<target>資料庫檔案已損壞:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>資料庫檔案尚未包含有關上次同步資訊。</target>
+
+<source>Loading file %x...</source>
+<target>正在讀取檔案 %x…</target>
-<source>Database files do not share a common session.</source>
-<target>資料庫檔案不會共享一個共同的連線。</target>
+<source>Saving file %x...</source>
+<target>正在儲存檔案 %x…</target>
<source>Searching for folder %x...</source>
<target>正在搜尋資料夾 %x…</target>
@@ -388,9 +440,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>正在檢測廢棄鎖…</target>
-<source>Saving file %x...</source>
-<target>正在儲存檔案 %x…</target>
-
<source>Items processed:</source>
<target>已處理項目:</target>
@@ -433,7 +482,7 @@ Actual: %y bytes
<target>瀏覽目錄</target>
<source>Cannot access the Volume Shadow Copy Service.</source>
-<target>無法讀取卷影複製服務。</target>
+<target>無法存取卷影複製服務。</target>
<source>Please run the 64-bit version of FreeFileSync to create shadow copies on this system.</source>
<target>請在此系統上執行64位元版本的FreeFileSync新建卷影副本。</target>
@@ -644,14 +693,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>沒有足夠的可用空間:</target>
-<source>Required:</source>
-<target>必要:</target>
-
<source>Available:</source>
<target>可用:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>多個配對資料夾寫入一個共同的子資料夾。請檢查您的配置。</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>某些檔案將作為多個基本資料夾的一部分進行同步。</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>為了避免衝突,設定排除過濾器,以便每個更新的檔案被視為只有一個基本資料夾。</target>
+
+<source>Versioning folder:</source>
+<target>版本控制資料夾:</target>
+
+<source>Base folder:</source>
+<target>基本資料夾:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>版本控制檔案夾將被同步,因為它包含在基本資料夾中。</target>
<source>Synchronizing folder pair:</source>
<target>同步配對資料夾:</target>
@@ -659,6 +717,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>正在產生資料庫…</target>
+<source>Loading...</source>
+<target>正在載入…</target>
+
<source>job name</source>
<target>作業名稱</target>
@@ -758,7 +819,7 @@ The command is triggered if:
<target>本機篩選器</target>
<source>Active</source>
-<target>啟用</target>
+<target>活動</target>
<source>None</source>
<target>無</target>
@@ -781,15 +842,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>請選擇一個本機檔案系統、網路或MTP設備上的資料夾。</target>
-<source>SFTP folder</source>
-<target>SFTP資料夾</target>
-
-<source>Select SFTP folder</source>
-<target>選擇SFTP資料夾</target>
-
-<source>Select alternative folder type</source>
-<target>選擇備用資料夾類型</target>
-
<source>&New</source>
<target>新增(&N)</target>
@@ -835,11 +887,8 @@ The command is triggered if:
<source>&Tools</source>
<target>工具(&T)</target>
-<source>&Check for new version</source>
-<target>檢查新版本(&C)</target>
-
-<source>&Check now</source>
-<target>現在檢查(&C)</target>
+<source>&Check for updates now</source>
+<target>現在檢查更新(&C)</target>
<source>Check &automatically once a week</source>
<target>每週自動檢查一次(&a)</target>
@@ -859,6 +908,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>移除配對資料夾</target>
+<source>Access online storage</source>
+<target>存取線上儲存空間</target>
+
<source>Swap sides</source>
<target>兩邊交換</target>
@@ -946,9 +998,6 @@ The command is triggered if:
<source>Include:</source>
<target>包括:</target>
-<source>Exclude:</source>
-<target>排除:</target>
-
<source>Show examples</source>
<target>顯示範例</target>
@@ -1032,8 +1081,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>排列配對資料夾</target>
-<source>Enter your SFTP login details:</source>
-<target>請輸入您的SFTP登錄詳細資訊:</target>
+<source>Enter your login details:</source>
+<target>請輸入您的登錄資訊:</target>
+
+<source>Connection type:</source>
+<target>連線類型:</target>
<source>Server name or IP address:</source>
<target>伺服器名稱或IP位址:</target>
@@ -1041,11 +1093,29 @@ The command is triggered if:
<source>Port:</source>
<target>連接埠:</target>
+<source>Encryption:</source>
+<target>加密:</target>
+
+<source>&Disabled</source>
+<target>已禁用(&D)</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>顯式SSL/TLS(&E)</target>
+
+<source>Authentication:</source>
+<target>身份驗證:</target>
+
+<source>&Password</source>
+<target>密碼(&P):</target>
+
+<source>&Key file</source>
+<target>金鑰檔案(&K)</target>
+
<source>User name:</source>
<target>使用者名稱:</target>
-<source>Password:</source>
-<target>密碼:</target>
+<source>Private key file:</source>
+<target>私密金鑰檔案:</target>
<source>&Show password</source>
<target>顯示密碼(&S):</target>
@@ -1053,6 +1123,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>在伺服器上的目錄:</target>
+<source>Performance improvements:</source>
+<target>性能改進:</target>
+
+<source>How to get best performance?</source>
+<target>如何獲得最佳的性能?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>用於目錄閱讀的SSH連接:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>建議範圍:[1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>每個連接SFTP通道數:</target>
+
+<source>Detect server limit</source>
+<target>檢測伺服器限制</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2連接數 x 10通道 = 20倍更快的目錄讀取速度</target>
+
<source>Select a directory on the server:</source>
<target>選擇伺服器上的目錄:</target>
@@ -1182,6 +1273,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>使用C++編寫的原始碼:</target>
+<source>Donation details</source>
+<target>捐款詳情</target>
+
<source>If you like FreeFileSync:</source>
<target>如果您喜歡FreeFileSync:</target>
@@ -1191,8 +1285,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>歡迎反映意見和建議</target>
-<source>Homepage</source>
-<target>首頁</target>
+<source>Home page</source>
+<target>主頁</target>
<source>Email</source>
<target>信箱</target>
@@ -1203,8 +1297,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>非常感謝本地化語系翻譯工作人員:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH檔案傳輸協議</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>透過以下其中一種方法來啟動FreeFileSync捐贈版:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1.現在透過網際網路啟動:</target>
+
+<source>Activate online</source>
+<target>線上啟動</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2.從下面的URL檢索離線啟用金鑰:</target>
+
+<source>&Copy to clipboard</source>
+<target>複製到剪貼簿(&C)</target>
+
+<source>Enter activation key:</source>
+<target>輸入啟用金鑰:</target>
+
+<source>Activate offline</source>
+<target>離線啟動</target>
<source>Save as Batch Job</source>
<target>另存為批次處理作業</target>
@@ -1221,6 +1333,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>選擇時間間隔</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync捐贈版</target>
+
<source>&Options</source>
<target>選項(&O)</target>
@@ -1242,8 +1357,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>摘要</target>
-<source>&Download</source>
-<target>下載(&D)</target>
+<source>&Show details</source>
+<target>顯示詳細資訊(&S)</target>
<source>A new version of FreeFileSync is available:</source>
<target>FreeFileSync有新版本可用:</target>
@@ -1473,13 +1588,22 @@ This guarantees a consistent state even in case of a serious error.
<target>繼續(&C)</target>
<source>Progress</source>
-<target>進展</target>
+<target>進度</target>
<source>Log</source>
<target>日誌</target>
-<source>Loading...</source>
-<target>正在載入…</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>安裝檔已損壞。請重新安裝FreeFileSync。</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>%x,感謝你的捐款和支持!</target>
+
+<source>Password:</source>
+<target>密碼:</target>
+
+<source>Key password:</source>
+<target>金鑰密碼:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1535,6 +1659,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>顯示(&S)</target>
+<source>Downloading update...</source>
+<target>正在下載更新…</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>由修改時間和檔案大小比對來判斷相同檔案。</target>
@@ -1628,11 +1755,32 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>百分比</target>
+<source>Failed to retrieve update information.</source>
+<target>無法檢索更新訊息。</target>
+
+<source>Automatic updates:</source>
+<target>自動更新:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>需要FreeFileSync捐贈版</target>
+
<source>Check for Program Updates</source>
<target>檢查程式更新</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>要現在自動更新或是從FreeFileSync主頁手動下載?</target>
+
+<source>&Auto-update</source>
+<target>自動更新(&A)</target>
+
+<source>&Home page</source>
+<target>主頁(&H)</target>
+
<source>Download now?</source>
-<target>要立即下載嗎?</target>
+<target>要現在下載嗎?</target>
+
+<source>&Download</source>
+<target>下載(&D)</target>
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync已經是最新版本。</target>
@@ -1646,17 +1794,23 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>%x 的一致性檢查失敗。</target>
-<source>Cannot find system function %x.</source>
-<target>找不到系統函數 %x。</target>
+<source>Installation was registered on a different operating system.</source>
+<target>已安裝註冊在不同的作業系統上。</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>無法啟動FreeFileSync捐贈版。</target>
+
+<source>Incorrect activation key.</source>
+<target>不正確的啟用金鑰。</target>
<source>Unable to register to receive system messages.</source>
-<target>無法登錄接收系統訊息。</target>
+<target>無法註冊以接收系統訊息。</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>安裝檔已損壞。請重新安裝FreeFileSync。</target>
+<source>Cannot find system function %x.</source>
+<target>找不到系統函數 %x。</target>
<source>Unable to register device notifications for %x.</source>
-<target>%x 無法註冊裝置通知。</target>
+<target>無法註冊 %x 的裝置通知。</target>
<source>Cannot monitor directory %x.</source>
<target>無法監測目錄 %x。</target>
@@ -1685,9 +1839,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>無法複製從 %x 到 %y 的屬性。</target>
-<source>Type of item %x is not supported:</source>
-<target>項目類型 %x 不被支援:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1736,9 +1887,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>配置檔案 %x 是不完整的。缺少的元素將設定為其預設值。</target>
-<source>Internet access failed.</source>
-<target>網際網路連線失敗。</target>
-
<source>Prepare installation</source>
<target>準備安裝</target>
@@ -1808,18 +1956,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>使用FreeFileSync進行編輯</target>
-<source>Thanks for your donation and support!</source>
-<target>感謝您的捐贈和支援!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>捐贈者的FreeFileSync安裝程式已達到其日常的安裝限制。</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>現在要從FreeFileSync首頁下載普通版嗎?</target>
-
<source>The portable version cannot install into the selected folder.</source>
-<target>可擕式版本不能安裝到所選的資料夾。</target>
+<target>可攜式版本不能安裝到所選的資料夾。</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>請選擇本地安裝類型或選擇不同的安裝資料夾。</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>無干擾安裝模式僅在FreeFileSync捐贈版才可使用。</target>
+
diff --git a/FreeFileSync/Build/Languages/croatian.lng b/FreeFileSync/Build/Languages/croatian.lng
index 5f9c5005..67ffe110 100755
--- a/FreeFileSync/Build/Languages/croatian.lng
+++ b/FreeFileSync/Build/Languages/croatian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Postavljam zadani sinkronizacijski smjer: Stare datoteke će biti prepisane novim datotekama.</target>
-<source>Creating folder %x</source>
-<target>Kreiranje mape %x</target>
-
<source>Creating file %x</source>
<target>Izrađujem datoteku %x</target>
+<source>Creating folder %x</source>
+<target>Kreiranje mape %x</target>
+
<source>Creating symbolic link %x</source>
<target>Izrađujem simboličnu poveznicu %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Ukoliko ignorirate ovu pogrešku zanemarene mape će se smatrati praznima.Prazne mape se izrade automatski kad bude potrebno.</target>
-<source>A folder input field is empty.</source>
-<target>Polje za odabir mape je prazno.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Odgovarajuća mapa će se smatrati praznom.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Slijedeće putanje mapa su ovisne jedne o drugima:</target>
-
<source>File %x has an invalid date.</source>
<target>Datoteka %x ima nevažeći datum.</target>
<source>Date:</source>
<target>Datum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Datoteke %x imaju isti datum ali različitu veličinu.</target>
+<source>Files have the same date but a different size.</source>
+<target>Datoteke imaju isti datum ali različitu veličinu.</target>
<source>Size:</source>
<target>Veličina:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Usporedba sadržaja je preskočena za izdvojene datoteke %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Usporedba sadržaja je preskočena za izdvojene datoteke.</target>
<source>Items differ in attributes only</source>
<target>Stavke se razlikuju samo u atributima</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Pokretanje usporedbe</target>
+<source>A folder input field is empty.</source>
+<target>Polje za odabir mape je prazno.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Odgovarajuća mapa će se smatrati praznom.</target>
+
+<source>Exclude:</source>
+<target>Odvojiti:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Jedna bazna mapa od para mapa se nalazi u drugoj mapi.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Mapa bi trebala biti izdvojena od sinkronizacije pomoću filtera.</target>
+
<source>Calculating sync directions...</source>
<target>Izračunavanje smjerova sinkronizacije...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Osvježi atribute desno</target>
-<source>Cannot write permissions of %x.</source>
-<target>Ne mogu zapisati dopuštenja za %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operacija nije podržana za različite bazne mape.</target>
-
<source>Cannot write file %x.</source>
<target>Ne mogu zapisati datoteku %x.</target>
@@ -267,39 +267,45 @@ Očekivano: %x bajta
Stvarno: %y bajta
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Ne mogu zapisati dopuštenja za %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operacija nije podržana za različite bazne mape.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Ne može se kopirati simbolična poveznica %x prema %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Ne mogu premjestiti datoteku %x u %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Ne mogu specificirati direktorij %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Nije moguće povezivanje na %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Ne mogu pročitati osobine od %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Nije moguće pristupiti informacijama servera %x.</target>
-<source>Cannot find %x.</source>
-<target>Nije moguće pronaći %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Ne mogu otvoriti mapu %x.</target>
-<source>Cannot open file %x.</source>
-<target>Ne mogu otvoriti datoteku %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Nije moguće učitati mapu %x.</target>
<source>Cannot read file %x.</source>
<target>Ne mogu čitati datoteku %x.</target>
-<source>Cannot find device %x.</source>
-<target>Nije moguće pronaći uređaj %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Ne mogu pročitati osobine od %x.</target>
<source>Cannot create directory %x.</source>
<target>Ne mogu izraditi mapu %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Ne mogu izbrisati mapu %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Ne mogu izbrisati datoteku %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Ne mogu izbrisati mapu %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Ne mogu zapisati vrijeme izmjene %x.</target>
@@ -309,23 +315,67 @@ Stvarno: %y bajta
<source>Cannot resolve symbolic link %x.</source>
<target>Ne mogu odrediti simboličnu poveznicu %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Ne mogu otvoriti mapu %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Nije moguće premjestiti %x u koš za smeće.</target>
+
+<source>Cannot open file %x.</source>
+<target>Ne mogu otvoriti datoteku %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Nije moguće pronaći uređaj %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Nije moguće pronaći %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Vrsta stavke %x koji nije podržan:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Nije moguće brisanje simbolične poveznice %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Nije moguće izračunati slobodan prostor diska za %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Nije moguće premjestiti %x u koš za smeće.</target>
-
<source>Incorrect command line:</source>
<target>Netočna naredbena linija:</target>
-<source>Error Code %x:</source>
-<target>Pogreška broj %x:</target>
+<source>Error Code %x</source>
+<target>Kod greške %x.</target>
-<source>Unable to connect to %x.</source>
-<target>Nije moguće povezivanje na %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Server ne podržava provjeru autentičnosti preko %x.</target>
+
+<source>Required:</source>
+<target>Potrebno:</target>
+
+<source>Unable to access %x.</source>
+<target>Nije moguće pristupiti %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Vrijeme za operaciju je isteklo nakon %x sekundu.</pluralform>
+<pluralform>Vrijeme za operaciju je isteklo nakon %x sekundi.</pluralform>
+<pluralform>Vrijeme za operaciju je isteklo nakon %x sekundi.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Ne može se čekati na više od %x konekcije istovremeno.</pluralform>
+<pluralform>Ne može se čekati na više od %x konekcija istovremeno.</pluralform>
+<pluralform>Ne može se čekati na više od %x konekcija istovremeno.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktivne konekcije: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Nije uspjelo povezivanje na SFTP kanal broj %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -358,11 +408,17 @@ Stvarno: %y bajta
<source>Database file %x does not yet exist.</source>
<target>Datoteka baze %x još ne postoji.</target>
-<source>Database file is corrupt:</source>
-<target>Baza je oštećena:</target>
+<source>Database file is corrupted:</source>
+<target>Datoteka baze je oštećena:</target>
-<source>Database files do not share a common session.</source>
-<target>Datoteke baze podataka ne dijele zajedničku sesiju.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Datoteke baze još uvijek ne sadrže informacije o zadnjoj sinkronizaciji.</target>
+
+<source>Loading file %x...</source>
+<target>Učitavam datoteku %x...</target>
+
+<source>Saving file %x...</source>
+<target>Spremanje datoteke %x...</target>
<source>Searching for folder %x...</source>
<target>Tražim mapu %x...</target>
@@ -392,9 +448,6 @@ Stvarno: %y bajta
<source>Detecting abandoned lock...</source>
<target>Pronalazim napušteni ključ...</target>
-<source>Saving file %x...</source>
-<target>Spremanje datoteke %x...</target>
-
<source>Items processed:</source>
<target>Obrađene stavke:</target>
@@ -650,14 +703,23 @@ Naredba će biti pokrenuta ako se:
<source>Not enough free disk space available in:</source>
<target>Nedovoljno prostora na disku:</target>
-<source>Required:</source>
-<target>Potrebno:</target>
-
<source>Available:</source>
<target>Dostupno:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Višestruki parovi mapa zapisuju u zajedničku podmapu. Molimo provjerite vaše postavke.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Neke datoteke će biti sinkronizirane kao dio više baznih mapa.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Da bi izbjegli konflikt, postavite filtere za izdvajanje tako da se svaka ažurirana datoteka uzima u obzir samo kod jedne bazne mape.</target>
+
+<source>Versioning folder:</source>
+<target>Verzija mape:</target>
+
+<source>Base folder:</source>
+<target>Bazna mapa:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Mapa verzije će biti sinkronizirana jer je sadržana u baznoj mapi.</target>
<source>Synchronizing folder pair:</source>
<target>Mape sinkronizacije::</target>
@@ -665,6 +727,9 @@ Naredba će biti pokrenuta ako se:
<source>Generating database...</source>
<target>Izrađivanje baze podataka...</target>
+<source>Loading...</source>
+<target>Učitavam...</target>
+
<source>job name</source>
<target>Naziv zadatka</target>
@@ -789,15 +854,6 @@ Naredba će biti pokrenuta ako se:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Molimo odaberite mapu na lokalnom disku, mreži ili MTP uređaju.</target>
-<source>SFTP folder</source>
-<target>SFTP mapa</target>
-
-<source>Select SFTP folder</source>
-<target>Odaberite SFTP mapu</target>
-
-<source>Select alternative folder type</source>
-<target>Odaberite alternativni tip mape</target>
-
<source>&New</source>
<target>&Novo</target>
@@ -843,11 +899,8 @@ Naredba će biti pokrenuta ako se:
<source>&Tools</source>
<target>&Alati</target>
-<source>&Check for new version</source>
-<target>&Provjeri za novu verziju</target>
-
-<source>&Check now</source>
-<target>&Provjeri sada</target>
+<source>&Check for updates now</source>
+<target>&Provjeri nadogradnju sada</target>
<source>Check &automatically once a week</source>
<target>Provjeri &automatski jednom tjedno</target>
@@ -867,6 +920,9 @@ Naredba će biti pokrenuta ako se:
<source>Remove folder pair</source>
<target>Ukloni ovu mapu</target>
+<source>Access online storage</source>
+<target>Pristupi online pohrani</target>
+
<source>Swap sides</source>
<target>Zamjeni strane</target>
@@ -954,9 +1010,6 @@ Naredba će biti pokrenuta ako se:
<source>Include:</source>
<target>Obuhvati:</target>
-<source>Exclude:</source>
-<target>Odvojiti:</target>
-
<source>Show examples</source>
<target>Prikaži primjere</target>
@@ -1040,8 +1093,11 @@ Naredba će biti pokrenuta ako se:
<source>Arrange folder pair</source>
<target>Rasporedi par mapa</target>
-<source>Enter your SFTP login details:</source>
-<target>Unesite SFTP pristupne podatke:</target>
+<source>Enter your login details:</source>
+<target>Unesite podatke za logiranje:</target>
+
+<source>Connection type:</source>
+<target>Tip konekcije:</target>
<source>Server name or IP address:</source>
<target>Naziv servera ili IP adresa:</target>
@@ -1049,11 +1105,29 @@ Naredba će biti pokrenuta ako se:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Enkripcija:</target>
+
+<source>&Disabled</source>
+<target>&Isključeno</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Isključivo SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Provjera korisnika:</target>
+
+<source>&Password</source>
+<target>&Lozinka</target>
+
+<source>&Key file</source>
+<target>&Ključ</target>
+
<source>User name:</source>
<target>Korisničko ime:</target>
-<source>Password:</source>
-<target>Lozinka:</target>
+<source>Private key file:</source>
+<target>Privatni ključ:</target>
<source>&Show password</source>
<target>&Prikaži lozinku</target>
@@ -1061,6 +1135,27 @@ Naredba će biti pokrenuta ako se:
<source>Directory on server:</source>
<target>Mapa na serveru:</target>
+<source>Performance improvements:</source>
+<target>Poboljšanje perfomansi:</target>
+
+<source>How to get best performance?</source>
+<target>Kako dobiti najbolje perfomanse?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH konekcije za čitanje direktorija:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Predložen raspon: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanala po konekciji:</target>
+
+<source>Detect server limit</source>
+<target>Detektiranje limita servera</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 konekcije x 10 kanala = 20 puta brže čitanje direktorija</target>
+
<source>Select a directory on the server:</source>
<target>Odaberi mapu na serveru:</target>
@@ -1190,6 +1285,9 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Source code written in C++ using:</source>
<target>Izvorni kod napisan u C++ uz korištenje:</target>
+<source>Donation details</source>
+<target>Detalji donacije</target>
+
<source>If you like FreeFileSync:</source>
<target>Ako volite FreeFileSync:</target>
@@ -1199,8 +1297,8 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Feedback and suggestions are welcome</source>
<target>Povratne informacije i prijedlozi su dobrodošli</target>
-<source>Homepage</source>
-<target>Početna stranica</target>
+<source>Home page</source>
+<target>Web stranica</target>
<source>Email</source>
<target>Email</target>
@@ -1211,8 +1309,26 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Many thanks for localization:</source>
<target>Velike zahvale idu:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH Protokol prijenosa datoteka</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktivirajte FreeFileSync Donatorsku Verziju pomoću sljedećih načina:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktivacija preko interneta:</target>
+
+<source>Activate online</source>
+<target>Aktiviraj online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Preuzeti offline aktivacijski ključ sa sljedeće URL adrese:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopirati u međuspremnik</target>
+
+<source>Enter activation key:</source>
+<target>Unesite aktivacijski ključ:</target>
+
+<source>Activate offline</source>
+<target>Aktivacija offline</target>
<source>Save as Batch Job</source>
<target>Spremi kao slijedni zadatak</target>
@@ -1229,6 +1345,9 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Select Time Span</source>
<target>Odaberite vremenski raspon</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donatorska Verzija</target>
+
<source>&Options</source>
<target>&Opcije</target>
@@ -1250,8 +1369,8 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Overview</source>
<target>Pregled</target>
-<source>&Download</source>
-<target>&Preuzmi</target>
+<source>&Show details</source>
+<target>&Prikaži detalje</target>
<source>A new version of FreeFileSync is available:</source>
<target>Nova verzija FreeFileSync je dostupna:</target>
@@ -1494,8 +1613,17 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Log</source>
<target>Izvješće</target>
-<source>Loading...</source>
-<target>Učitavam...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Instalacijske datoteke su oštećene. Molimo ponovno instalirajte FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Hvala Vam, %x, na vašoj donaciji i podršci!</target>
+
+<source>Password:</source>
+<target>Lozinka:</target>
+
+<source>Key password:</source>
+<target>Aktivacijski ključ:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1557,6 +1685,9 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>&Show</source>
<target>&Prikaži</target>
+<source>Downloading update...</source>
+<target>Preuzimanje ažuriranja...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Ustanovi jednake datoteke uspoređujući vrijeme izmjene i veličinu.</target>
@@ -1650,12 +1781,33 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Percentage</source>
<target>Postotak</target>
+<source>Failed to retrieve update information.</source>
+<target>Preuzimanje informacija za ažuriranje nije bilo uspješno.</target>
+
+<source>Automatic updates:</source>
+<target>Automatsko ažuriranje:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Zahtjeva FreeFileSync Donatorsku Verziju</target>
+
<source>Check for Program Updates</source>
<target>Provjeri za nadogradnje programa</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Automatski ažurirati sada ili preuzeti manualno sa FreeFileSync stranice?</target>
+
+<source>&Auto-update</source>
+<target>&Automatsko ažuriranje</target>
+
+<source>&Home page</source>
+<target>&Web stranica</target>
+
<source>Download now?</source>
<target>Preuzeti sada?</target>
+<source>&Download</source>
+<target>&Preuzmi</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je ažuran.</target>
@@ -1668,14 +1820,20 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Consistency check failed for %x.</source>
<target>Provjera dosljednosti nije uspjela za %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Ne mogu pronaći sistemsku funkciju %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Instalacija je registrirana na drugom operacijskom sustavu.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Aktivacija Donatorske Verzije FreeFileSync nije bila uspješna.</target>
+
+<source>Incorrect activation key.</source>
+<target>Neispravan aktivacijski ključ.</target>
<source>Unable to register to receive system messages.</source>
<target>Nije moguće registriranje za primanje sistemskih poruka.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Instalacijske datoteke su oštećene. Molimo reinstalirajte FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Ne mogu pronaći sistemsku funkciju %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nije moguće registrirati prijavu uređaja za %x.</target>
@@ -1707,9 +1865,6 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Cannot copy attributes from %x to %y.</source>
<target>Nije moguće kopiranje atributa od %x prema %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Vrsta stavke %x koji nije podržan:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1764,9 +1919,6 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Konfiguracijska datoteka %x je nepotpuna. Nedostajući elementi će biti postavljeni na početne vrijednosti.</target>
-<source>Internet access failed.</source>
-<target>Mrežna veza nije dostupna.</target>
-
<source>Prepare installation</source>
<target>Pripremam instalaciju</target>
@@ -1836,18 +1988,12 @@ Ovo garantira čvrsto stanje čak u slučaju ozbiljne greške.
<source>Edit with FreeFileSync</source>
<target>Uredi pomoću FreeFileSynca</target>
-<source>Thanks for your donation and support!</source>
-<target>Hvala na donaciji i podršci!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ova instalacijska datoteka FreeFileSync donatorske verzije je dosegla dnevni limit instalacija.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Preuzeti standardnu verziju s FreeFileSync stranice sada?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Ova portabilna verzija se ne može instalirati u odabranu mapu.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Molimo odaberite lokalnu instalaciju ili odaberite drugu mapu za instalaciju.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Skriveni instalacijski tip je dostupan samo u FreeFileSync Donatorskoj Verziji.</target>
+
diff --git a/FreeFileSync/Build/Languages/czech.lng b/FreeFileSync/Build/Languages/czech.lng
index ad88d09c..f03cae26 100755
--- a/FreeFileSync/Build/Languages/czech.lng
+++ b/FreeFileSync/Build/Languages/czech.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Vytváření adresáře %x</target>
-
<source>Creating file %x</source>
<target>Vytváření souboru %x</target>
+<source>Creating folder %x</source>
+<target>Vytváření adresáře %x</target>
+
<source>Creating symbolic link %x</source>
<target>Vytváření symbolického odkazu %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Pokud přeskočíte tuto chybu, složka bude považována za prázdnou. Chybějící složky pak budou automaticky vytvořeny.</target>
-<source>A folder input field is empty.</source>
-<target>Není zadána vstupní složka.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Odpovídající složka bude považována za prázdnou.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Následující složky mají navzájem závislé cesty:</target>
-
<source>File %x has an invalid date.</source>
<target>Soubor %x má chybné datum.</target>
<source>Date:</source>
<target>Čas:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Soubory %x mají stejné datum a čas ale rozdílnou velikost.</target>
+<source>Files have the same date but a different size.</source>
+<target>Soubory mají stejné datum a čas ale rozdílnou velikost.</target>
<source>Size:</source>
<target>Velikost:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Porovnání obsahu bylo vynecháno pro soubory %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Porovnání obsahu bylo vynecháno pro vybrané soubory.</target>
<source>Items differ in attributes only</source>
<target>Položky se liší pouze ve vlastnostech</target>
@@ -176,10 +167,10 @@
<target>Spuštění s prioritou na pozadí</target>
<source>Lock directories during sync</source>
-<target>Zamčení adresářů během sycnchronizace</target>
+<target>Zamčení adresářů během synchronizace</target>
<source>Verify copied files</source>
-<target>Povtvrzení zkopírovaných souboů</target>
+<target>Potvrzení zkopírovaných souborů</target>
<source>Using non-default global settings:</source>
<target>Použití zvláštního nastavení:</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Začátek porovnávání</target>
+<source>A folder input field is empty.</source>
+<target>Není zadána vstupní složka.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Odpovídající složka bude považována za prázdnou.</target>
+
+<source>Exclude:</source>
+<target>Vynechat:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Jedena ze základních párů složek je vnořená v jiném páru.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Složka by měla být vynechána ze synchronizace pomocí filtru.</target>
+
<source>Calculating sync directions...</source>
<target>Příprava adresářů synchronizace...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Nastavit vlastnosti vpravo</target>
-<source>Cannot write permissions of %x.</source>
-<target>Nelze zapsat oprávnění pro %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operace není podporována pro různé typy základních adresářů.</target>
-
<source>Cannot write file %x.</source>
<target>Nelze zapsat soubor %x.</target>
@@ -267,39 +267,45 @@ Očekáváno: %x b
Aktuálně: %y b
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Nelze zapsat oprávnění pro %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operace není podporována pro různé typy základních adresářů.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Nelze kopírovat symbolický odkaz %x do %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Nelze přesunout soubor %x do %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Nelze procházet adresář %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Nepodařilo se připojit k %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Nelze číst atributy souboru %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Nelze získat informace o serveru %x.</target>
-<source>Cannot find %x.</source>
-<target>Nelze najít %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Nelze otevřít adresář %x.</target>
-<source>Cannot open file %x.</source>
-<target>Nelze otevřít soubor %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Nelze číst adresář %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Nelze číst atributy souboru %x.</target>
<source>Cannot read file %x.</source>
<target>Nelze číst soubor %x.</target>
-<source>Cannot find device %x.</source>
-<target>Nelze nalézt zařízení %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Nelze vytvořit adresář %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Nelze smazat adresář %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Nelze smazat soubor %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Nelze smazat adresář %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Nelze nastavit atribut času změny pro %x.</target>
@@ -309,23 +315,67 @@ Aktuálně: %y b
<source>Cannot resolve symbolic link %x.</source>
<target>Nelze najít odkaz zástupce %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Nelze otevřít adresář %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Není možné přesunout %x do Koše.</target>
+
+<source>Cannot open file %x.</source>
+<target>Nelze otevřít soubor %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Nelze nalézt zařízení %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Nelze najít %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Typ položky %x není podporován:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Nelze smazat symbolický odkaz %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Nelze zjistit volné místo na disku %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Není možné přesunout %x do Koše.</target>
-
<source>Incorrect command line:</source>
<target>Neplatný příkaz:</target>
-<source>Error Code %x:</source>
-<target>Chybový kód %x:</target>
+<source>Error Code %x</source>
+<target>Chybový kód %x</target>
-<source>Unable to connect to %x.</source>
-<target>Nepodařilo se připojit k %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Server nepodporuje ověření pomocí %x.</target>
+
+<source>Required:</source>
+<target>Požadováno:</target>
+
+<source>Unable to access %x.</source>
+<target>Nepodařil se přístup k %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Vypršel čas 1 sekundy pro dokončení operace.</pluralform>
+<pluralform>Vypršel čas %x sekund pro dokončení operace.</pluralform>
+<pluralform>Vypršel čas %x sekund pro dokončení operace.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Nelze čekat na více jak 1 spojení najednou.</pluralform>
+<pluralform>Nelze čekat na více jak %x spojení najednou.</pluralform>
+<pluralform>Nelze čekat na více jak %x spojení najednou.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktivní spojení: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Nelze otevřít SFTP kanál %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -358,11 +408,17 @@ Aktuálně: %y b
<source>Database file %x does not yet exist.</source>
<target>Databázový soubor %x neexistuje.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Databáze je poškozená:</target>
-<source>Database files do not share a common session.</source>
-<target>Databázové soubory nejsou navzájem komplementární.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Databázový soubor ještě neobsahuje informace o poslední synchronizaci.</target>
+
+<source>Loading file %x...</source>
+<target>Načítání souboru %x...</target>
+
+<source>Saving file %x...</source>
+<target>Ukládání souboru %x...</target>
<source>Searching for folder %x...</source>
<target>Otevírání složky %x...</target>
@@ -392,9 +448,6 @@ Aktuálně: %y b
<source>Detecting abandoned lock...</source>
<target>Prověřování uzamčení...</target>
-<source>Saving file %x...</source>
-<target>Ukládání souboru %x...</target>
-
<source>Items processed:</source>
<target>Zpracováno položek:</target>
@@ -650,14 +703,23 @@ Příkaz je spuštěn když:
<source>Not enough free disk space available in:</source>
<target>Nedostatek místa na disku:</target>
-<source>Required:</source>
-<target>Požadováno:</target>
-
<source>Available:</source>
<target>K dispozici:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Více složek obsahuje společnou podsložku. Prosím zkontrolujte si nastavení synchronizace.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Některé soubory budou synchronizovány jako součást vícezdrojových složek.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>K předejití konfliktů je potřeba nastavit filtr tak, aby každý soubor měl pouze jednu základní nadřazenou složku.</target>
+
+<source>Versioning folder:</source>
+<target>Verzovací složka:</target>
+
+<source>Base folder:</source>
+<target>Základní složka:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Verzovací složka bude synchronizována neboť je obsažena v základní nadřazené složce.</target>
<source>Synchronizing folder pair:</source>
<target>Zpracovávání páru složek:</target>
@@ -665,6 +727,9 @@ Příkaz je spuštěn když:
<source>Generating database...</source>
<target>Vytváření databáze...</target>
+<source>Loading...</source>
+<target>Načítání...</target>
+
<source>job name</source>
<target>název úlohy</target>
@@ -789,15 +854,6 @@ Příkaz je spuštěn když:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Prosím vyberte složku na místním souborovém systému, síti nebo multimediální zařízení.</target>
-<source>SFTP folder</source>
-<target>SFTP složka</target>
-
-<source>Select SFTP folder</source>
-<target>Vyberte SFTP složku</target>
-
-<source>Select alternative folder type</source>
-<target>Vyberte typ složky</target>
-
<source>&New</source>
<target>&Nový</target>
@@ -843,11 +899,8 @@ Příkaz je spuštěn když:
<source>&Tools</source>
<target>&Nastavení</target>
-<source>&Check for new version</source>
-<target>&Zkontrolovat aktualizace</target>
-
-<source>&Check now</source>
-<target>Zkontrolovat &nyní</target>
+<source>&Check for updates now</source>
+<target>&Zkontrolovat aktualizace nyní</target>
<source>Check &automatically once a week</source>
<target>Kontrolovat &automaticky jednou týdně</target>
@@ -867,6 +920,9 @@ Příkaz je spuštěn když:
<source>Remove folder pair</source>
<target>Odstranit dvojici adresářů</target>
+<source>Access online storage</source>
+<target>Přístup k úložišti</target>
+
<source>Swap sides</source>
<target>Změna stran</target>
@@ -954,9 +1010,6 @@ Příkaz je spuštěn když:
<source>Include:</source>
<target>Zahrnout:</target>
-<source>Exclude:</source>
-<target>Vynechat:</target>
-
<source>Show examples</source>
<target>Ukázat příklady</target>
@@ -1040,8 +1093,11 @@ Příkaz je spuštěn když:
<source>Arrange folder pair</source>
<target>Uspořádat složky</target>
-<source>Enter your SFTP login details:</source>
-<target>Zadejte přihlašovací údaje k SFTP:</target>
+<source>Enter your login details:</source>
+<target>Zadejte přihlašovací údaje:</target>
+
+<source>Connection type:</source>
+<target>Typ spojení:</target>
<source>Server name or IP address:</source>
<target>Jméno sevru nebo jeho IP adresa:</target>
@@ -1049,20 +1105,59 @@ Příkaz je spuštěn když:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Šifrování:</target>
+
+<source>&Disabled</source>
+<target>&Vypnuto</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicitní SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Zabezpečení:</target>
+
+<source>&Password</source>
+<target>&Heslo</target>
+
+<source>&Key file</source>
+<target>&Klíč</target>
+
<source>User name:</source>
<target>Uživatelské jméno:</target>
-<source>Password:</source>
-<target>Heslo:</target>
+<source>Private key file:</source>
+<target>Soubor se soukromým klíčem:</target>
<source>&Show password</source>
<target>&Zobraz</target>
<source>Directory on server:</source>
-<target>Adresář na servru:</target>
+<target>Adresář na serveru:</target>
+
+<source>Performance improvements:</source>
+<target>Vylepšení rychlosti:</target>
+
+<source>How to get best performance?</source>
+<target>Jak získat nejlepší rychlost?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH spojení pro čtení adresářů:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Navrhované rozmezí: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanálů na spojení:</target>
+
+<source>Detect server limit</source>
+<target>Zjistit omezení serveru</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 spojení x 10 kanálů = 20 krát rychlejší načítání adresářů</target>
<source>Select a directory on the server:</source>
-<target>Výběr adresáře na servru:</target>
+<target>Výběr adresáře na serveru:</target>
<source>Select Folder</source>
<target>Výběr složky</target>
@@ -1187,6 +1282,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Zdrojový kód byl napsán kompletně v C++ pomocí:</target>
+<source>Donation details</source>
+<target>Podrobnosti</target>
+
<source>If you like FreeFileSync:</source>
<target>Pokud se Vám FreeFileSync líbí:</target>
@@ -1196,7 +1294,7 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Komentáře a náměty jsou vždy vítány</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Navštivte</target>
<source>Email</source>
@@ -1208,8 +1306,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Poděkování za překlad FreeFileSync:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH protokol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktivovat placenou verzi FreeFileSync Donation Edition pomocí:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktivovat přes internet:</target>
+
+<source>Activate online</source>
+<target>Aktivace on-line</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Získat aktivační klíč z následující adresy:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopírovat do schránky</target>
+
+<source>Enter activation key:</source>
+<target>Vložit aktivační klíč:</target>
+
+<source>Activate offline</source>
+<target>Aktivace off-line</target>
<source>Save as Batch Job</source>
<target>Uložit jako dávku</target>
@@ -1226,6 +1342,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Časové rozmezí</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>Nastavení &programu</target>
@@ -1247,14 +1366,14 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Přehled</target>
-<source>&Download</source>
-<target>&Stahování</target>
+<source>&Show details</source>
+<target>&Zobrazit podrobnosti</target>
<source>A new version of FreeFileSync is available:</source>
<target>Je dostupná novější verze FreeFileSync:</target>
<source>Local path not available for %x.</source>
-<target>Mistní cesta není k dspozici pro %x.</target>
+<target>Místní cesta není k dispozici pro %x.</target>
<source>Confirm</source>
<target>Potvrdit</target>
@@ -1491,8 +1610,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Záznam zpracování</target>
-<source>Loading...</source>
-<target>Načítání...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Instalace programu je poškozena. Prosím nainstalujte znovu FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Děkuji, %x, za příspěvek a podporu!</target>
+
+<source>Password:</source>
+<target>Heslo:</target>
+
+<source>Key password:</source>
+<target>Klíč:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1554,6 +1682,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Zobrazit</target>
+<source>Downloading update...</source>
+<target>Stahování aktualizace...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Rozpoznat shodné soubory porovnáním jejich data změny a velikosti.</target>
@@ -1567,7 +1698,7 @@ This guarantees a consistent state even in case of a serious error.
<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>Create a mirror backup of the left folder by adapting the right folder to match.</source>
-<target>Vytvořit zrcadlovou kopii levé složky tak, aby po synchronizci pravá složka přesně odpovídala levé.</target>
+<target>Vytvořit zrcadlovou kopii levé složky tak, aby po synchronizaci pravá složka přesně odpovídala levé.</target>
<source>Copy new and updated files to the right folder.</source>
<target>Kopírovat nové a aktualizované soubory do pravé složky.</target>
@@ -1647,17 +1778,38 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Procentní podíl</target>
+<source>Failed to retrieve update information.</source>
+<target>Nepodařilo se získat informace o aktualizaci.</target>
+
+<source>Automatic updates:</source>
+<target>Automatická aktualizace:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Je vyžadována předplacená verze FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Hledání aktualizací programu</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Provést automatickou aktualizaci nyní nebo stáhnout ručně z domovské stránky FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Automatická aktualizace</target>
+
+<source>&Home page</source>
+<target>&Domovská stránka</target>
+
<source>Download now?</source>
<target>Stáhnout nyní?</target>
+<source>&Download</source>
+<target>&Stahování</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je aktuální.</target>
<source>Cannot find current FreeFileSync version number online. A newer version is likely available. Check manually now?</source>
-<target>Současná verze FreeFileSync nebyla nalezena online! Pravděpodobně existuje novější verze. Chcete verzi zkontrolovat ručně?</target>
+<target>Současná verze FreeFileSync nebyla nalezena on-line! Pravděpodobně existuje novější verze. Chcete verzi zkontrolovat ručně?</target>
<source>&Check</source>
<target>&Kontrola</target>
@@ -1665,14 +1817,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Nepodařila se kontrola konzistence pro %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Nelze najít systémovou funkci %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Instalace byla registrována na jiném operačním systému.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Nepodařilo se aktivovat FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Špatný aktivační klíč.</target>
<source>Unable to register to receive system messages.</source>
<target>Nepodařilo se zaregistrovat k odběru systémových zpráv.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Instalace aplikace je poškozena. Prosím přeinstalujte FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Nelze najít systémovou funkci %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nepodařilo se zaregistrovat zprávy zařízení %x.</target>
@@ -1704,9 +1862,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Nelze kopírovat atributy z %x do %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Typ položky %x není podporován:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1759,10 +1914,7 @@ This guarantees a consistent state even in case of a serious error.
<target>Nelze načíst následující XML elementy:</target>
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
-<target>Konfigurační soubor %x je nekompletní. Chybějicí položky budou nahrazeny výchozími hodnotami.</target>
-
-<source>Internet access failed.</source>
-<target>Není přístup k internetu.</target>
+<target>Konfigurační soubor %x je nekompletní. Chybějící položky budou nahrazeny výchozími hodnotami.</target>
<source>Prepare installation</source>
<target>Příprava instalace</target>
@@ -1789,7 +1941,7 @@ This guarantees a consistent state even in case of a serious error.
<target>zaregistruje přípony souborů FreeFileSync</target>
<source>Create Explorer context menu entries</source>
-<target>Vytviřit položky v kontextovém menu Průzkumníka</target>
+<target>Vytvořit položky v kontextovém menu Průzkumníka</target>
<source>Save settings in installation directory</source>
<target>uloží nastavení do složky určené pro instalaci</target>
@@ -1833,18 +1985,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Upravit v FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Děkuji za Vaše příspěvky a podporu!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Tento instalátor pro přispěvovatele FreeFileSync dosáhl maximální počet instalací.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Stáhnout verzi FreeFileSync z domovské stránky?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Přenosnou verzi aplikace nelze instalovat do vybrané složky.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
-<target>Prosím zvolte lokální typ instalace nebo vyberte jinou sloužku.</target>
+<target>Prosím zvolte lokální typ instalace nebo vyberte jinou složku.</target>
+
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Tichá instalace je k dispozici pouze v předplacené verzi FreeFileSync Donation Edition.</target>
diff --git a/FreeFileSync/Build/Languages/danish.lng b/FreeFileSync/Build/Languages/danish.lng
index 422a21c8..3400b751 100755
--- a/FreeFileSync/Build/Languages/danish.lng
+++ b/FreeFileSync/Build/Languages/danish.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Opretter mappen %x</target>
-
<source>Creating file %x</source>
<target>Opretter filen %x</target>
+<source>Creating folder %x</source>
+<target>Opretter mappen %x</target>
+
<source>Creating symbolic link %x</source>
<target>Opretter symlinket %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Hvis denne fejl ignoreres, betragtes mapperne som tomme. Manglende mapper oprettes automatisk efter behov.</target>
-<source>A folder input field is empty.</source>
-<target>Der er ikke valgt nogen mapper.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Den tilsvarende mappe betragtes som tom.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Følgende mappestier afhænger af hinanden:</target>
-
<source>File %x has an invalid date.</source>
<target>Filen %x har en ugyldig dato.</target>
<source>Date:</source>
<target>Dato:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Filerne %x har den samme dato men forskellig størrelse.</target>
+<source>Files have the same date but a different size.</source>
+<target>Filer har samme dato men forskellig størrelse.</target>
<source>Size:</source>
<target>Størrelse:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Indholdsanalyse udeladt for ekskluderede filer %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Indholdssammenligning sprunget over for ekskluderede filer.</target>
<source>Items differ in attributes only</source>
<target>Enhederne har kun attributter til forskel</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Starter analyse</target>
+<source>A folder input field is empty.</source>
+<target>Der er ikke valgt nogen mapper.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Den tilsvarende mappe betragtes som tom.</target>
+
+<source>Exclude:</source>
+<target>Ekskludér:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Et mappepars overordnede mappe indeholdes i den anden.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Mappen bør ekskluderes med et filter.</target>
+
<source>Calculating sync directions...</source>
<target>Forbereder synkronisering...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Opdater attributter mod højre</target>
-<source>Cannot write permissions of %x.</source>
-<target>Kan ikke skrive tilladelserne til %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Handlingen understøtter ikke forskellige typer hovedmapper.</target>
-
<source>Cannot write file %x.</source>
<target>Kan ikke oprette filen %x.</target>
@@ -267,6 +267,12 @@ Forventet: %x byte
Aktuel: %y byte
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Kan ikke skrive tilladelserne til %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Handlingen understøtter ikke forskellige typer hovedmapper.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Kan ikke kopiere symlink fra %x til %y.</target>
@@ -276,36 +282,30 @@ Aktuel: %y byte
<source>Unable to connect to %x.</source>
<target>Kan ikke kontakte %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Kunne ikke hente oplysninger om serveren %x.</target>
+
<source>Cannot open directory %x.</source>
<target>Kan ikke åbne mappen %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Kan ikke optælle mappen %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Kan ikke læse mappen %x.</target>
<source>Cannot read file attributes of %x.</source>
<target>Kan ikke læse filattributterne på %x.</target>
-<source>Cannot find %x.</source>
-<target>Kan ikke finde %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Filen %x kan ikke åbnes.</target>
-
<source>Cannot read file %x.</source>
<target>Kan ikke læse filen %x.</target>
-<source>Cannot find device %x.</source>
-<target>Kan ikke finde enheden %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Kan ikke oprette mappen %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Kan ikke slette mappen %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Kan ikke slette filen %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Kan ikke slette mappen %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Kan ikke opdatere tidsændring på %x.</target>
@@ -315,15 +315,66 @@ Aktuel: %y byte
<source>Cannot resolve symbolic link %x.</source>
<target>Kan ikke følge symlinket %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Kan ikke definere ledig plads på %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Kunne ikke flytte %x til papirkurv.</target>
+<source>Cannot open file %x.</source>
+<target>Filen %x kan ikke åbnes.</target>
+
+<source>Cannot find device %x.</source>
+<target>Kan ikke finde enheden %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Kan ikke finde %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Filtypen %x understøttes ikke:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Kan ikke slette det symbolske link %x.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Kan ikke definere ledig plads på %x.</target>
+
<source>Incorrect command line:</source>
<target>Ugyldig kommando:</target>
+<source>Error Code %x</source>
+<target>Fejlkode %x</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>Serveren støtter ikke godkendelse via %x.</target>
+
+<source>Required:</source>
+<target>Krævet:</target>
+
+<source>Unable to access %x.</source>
+<target>Kan ikke tilgå %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Tiden udløb efter 1 sekund.</pluralform>
+<pluralform>Tiden udløb efter %x sekunder.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Kan ikke vente på mere end 1 forbindelse af gangen.</pluralform>
+<pluralform>Kan ikke vente på mere end %x forbindelser af gangen.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktive forbindelser: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Fejl ved åbning af SFTP kanal nr. %x.</target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -354,11 +405,17 @@ Aktuel: %y byte
<source>Database file %x does not yet exist.</source>
<target>Databasefilen %x findes ikke.</target>
-<source>Database file is corrupt:</source>
-<target>Databasefilen er ødelagt:</target>
+<source>Database file is corrupted:</source>
+<target>Databasefil i stykker:</target>
-<source>Database files do not share a common session.</source>
-<target>Databasefiler kan ikke dele handling.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Databasefilen indeholder endnu ikke oplysninger om sidste synkronisering.</target>
+
+<source>Loading file %x...</source>
+<target>Indlæser filen %x...</target>
+
+<source>Saving file %x...</source>
+<target>Gemmer filen %x...</target>
<source>Searching for folder %x...</source>
<target>Søger efter mappen %x...</target>
@@ -387,9 +444,6 @@ Aktuel: %y byte
<source>Detecting abandoned lock...</source>
<target>Finder efterladt lås...</target>
-<source>Saving file %x...</source>
-<target>Gemmer filen %x...</target>
-
<source>Items processed:</source>
<target>Emner behandlet:</target>
@@ -644,14 +698,23 @@ Kommandoen udføres hvis:
<source>Not enough free disk space available in:</source>
<target>Ikke nok ledig diskplads på:</target>
-<source>Required:</source>
-<target>Krævet:</target>
-
<source>Available:</source>
<target>Tilgængeligt:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Flere mappepar skriver til en almen undermappe. Kontroller dine indstillinger.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Nogle filer synkroniseres som del af flere basismapper.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Undgå konflikter ved at bruge filtre, så hver opdateret fil kun relateres til en basismappe.</target>
+
+<source>Versioning folder:</source>
+<target>Versioneringsmappe:</target>
+
+<source>Base folder:</source>
+<target>Basismappe:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Versioneringsmappen synkroniseres, da den er indeholdt i en basismappe.</target>
<source>Synchronizing folder pair:</source>
<target>Synkroniserer mappepar:</target>
@@ -659,6 +722,9 @@ Kommandoen udføres hvis:
<source>Generating database...</source>
<target>Opretter database...</target>
+<source>Loading...</source>
+<target>Indlæser...</target>
+
<source>job name</source>
<target>Jobnavn</target>
@@ -782,15 +848,6 @@ Kommandoen udføres hvis:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Vælg lokal mappe, netværksmappe eller mappe på MTP enhed.</target>
-<source>SFTP folder</source>
-<target>SFTP mappe</target>
-
-<source>Select SFTP folder</source>
-<target>Vælg SFTP mappe</target>
-
-<source>Select alternative folder type</source>
-<target>Vælg alternativ mappetype</target>
-
<source>&New</source>
<target>&Ny</target>
@@ -836,11 +893,8 @@ Kommandoen udføres hvis:
<source>&Tools</source>
<target>&Værktøj</target>
-<source>&Check for new version</source>
-<target>Søg &efter opdatering</target>
-
-<source>&Check now</source>
-<target>Søg &nu</target>
+<source>&Check for updates now</source>
+<target>S&øg efter opdatering</target>
<source>Check &automatically once a week</source>
<target>Søg &automatisk en gang om ugen</target>
@@ -860,6 +914,9 @@ Kommandoen udføres hvis:
<source>Remove folder pair</source>
<target>Fjern mappepar</target>
+<source>Access online storage</source>
+<target>Tilgå onlinelager</target>
+
<source>Swap sides</source>
<target>Byt side</target>
@@ -947,9 +1004,6 @@ Kommandoen udføres hvis:
<source>Include:</source>
<target>Inkludér:</target>
-<source>Exclude:</source>
-<target>Ekskludér:</target>
-
<source>Show examples</source>
<target>Vis eksempler</target>
@@ -1033,8 +1087,11 @@ Kommandoen udføres hvis:
<source>Arrange folder pair</source>
<target>Arrangér mappepar</target>
-<source>Enter your SFTP login details:</source>
-<target>Angiv SFTP detaljer:</target>
+<source>Enter your login details:</source>
+<target>Angiv login:</target>
+
+<source>Connection type:</source>
+<target>Forbindelsestype:</target>
<source>Server name or IP address:</source>
<target>Servernavn eller IP adresse:</target>
@@ -1042,11 +1099,29 @@ Kommandoen udføres hvis:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Kryptering:</target>
+
+<source>&Disabled</source>
+<target>&Deaktiveret</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Eksplicit SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Godkendelse:</target>
+
+<source>&Password</source>
+<target>K&odeord</target>
+
+<source>&Key file</source>
+<target>&Nøglefil</target>
+
<source>User name:</source>
<target>Brugernavn:</target>
-<source>Password:</source>
-<target>Kodeord:</target>
+<source>Private key file:</source>
+<target>Privat nøglefil:</target>
<source>&Show password</source>
<target>Vis &kodeord</target>
@@ -1054,6 +1129,27 @@ Kommandoen udføres hvis:
<source>Directory on server:</source>
<target>Servermappe:</target>
+<source>Performance improvements:</source>
+<target>Ydelsesforbedring:</target>
+
+<source>How to get best performance?</source>
+<target>Hvordan får du bedste ydelse?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH forbindelse for mappelæsning:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Foreslået interval: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanaler pr. forbindelse:</target>
+
+<source>Detect server limit</source>
+<target>Genkend servergrænse</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 forbindelser x 10 kanaler = 20 gange hurtigere mappelæsning</target>
+
<source>Select a directory on the server:</source>
<target>Vælg servermappe:</target>
@@ -1183,6 +1279,9 @@ Sikrer processen ved alvorlige fejl.
<source>Source code written in C++ using:</source>
<target>Kildekoden er skrevet i C++ med hjælp fra:</target>
+<source>Donation details</source>
+<target>Donationsdetaljer</target>
+
<source>If you like FreeFileSync:</source>
<target>Er du glad for FreeFileSync:</target>
@@ -1192,7 +1291,7 @@ Sikrer processen ved alvorlige fejl.
<source>Feedback and suggestions are welcome</source>
<target>Kritik og forslag er meget velkomne</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Hjemmeside</target>
<source>Email</source>
@@ -1204,8 +1303,26 @@ Sikrer processen ved alvorlige fejl.
<source>Many thanks for localization:</source>
<target>Tak for oversættelse til:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH FTP</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktivér FreeFileSync donationsudgave på en af følgende måder:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktivér via internet nu:</target>
+
+<source>Activate online</source>
+<target>Aktivér online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Hent offline aktiveringsnøgle fra følgende adresse:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopiér</target>
+
+<source>Enter activation key:</source>
+<target>Indsæt aktiveringsnøgle:</target>
+
+<source>Activate offline</source>
+<target>Aktivér offline</target>
<source>Save as Batch Job</source>
<target>Gem som batchfil</target>
@@ -1222,6 +1339,9 @@ Sikrer processen ved alvorlige fejl.
<source>Select Time Span</source>
<target>Vælg tidsinterval</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync donationsudgave</target>
+
<source>&Options</source>
<target>&Indstillinger</target>
@@ -1243,8 +1363,8 @@ Sikrer processen ved alvorlige fejl.
<source>Overview</source>
<target>Oversigt</target>
-<source>&Download</source>
-<target>&Download</target>
+<source>&Show details</source>
+<target>&Vis detaljer</target>
<source>A new version of FreeFileSync is available:</source>
<target>FreeFileSync er blevet opdateret:</target>
@@ -1483,8 +1603,17 @@ Sikrer processen ved alvorlige fejl.
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Indlæser...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Ødelagte installationsfiler. Geninstaller FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Tak %x for donationen og støtten!</target>
+
+<source>Password:</source>
+<target>Kodeord:</target>
+
+<source>Key password:</source>
+<target>Nøglekodeord:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1543,6 +1672,9 @@ Sikrer processen ved alvorlige fejl.
<source>&Show</source>
<target>&Vis</target>
+<source>Downloading update...</source>
+<target>Henter opdatering...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Genkend ens filer efter filtid og størrelse.</target>
@@ -1636,12 +1768,33 @@ Sikrer processen ved alvorlige fejl.
<source>Percentage</source>
<target>Procent</target>
+<source>Failed to retrieve update information.</source>
+<target>Opdateringssøgning fejlede.</target>
+
+<source>Automatic updates:</source>
+<target>Automatiske opdateringer:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Kræver FreeFileSync donationsudgave</target>
+
<source>Check for Program Updates</source>
<target>Søg efter opdatering</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Opdater automatisk nu, eller download fra FreeFileSync hjemmeside?</target>
+
+<source>&Auto-update</source>
+<target>&Autoopdatering</target>
+
+<source>&Home page</source>
+<target>&Hjemmeside</target>
+
<source>Download now?</source>
<target>Download nu?</target>
+<source>&Download</source>
+<target>&Download</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync er opdateret.</target>
@@ -1654,14 +1807,20 @@ Sikrer processen ved alvorlige fejl.
<source>Consistency check failed for %x.</source>
<target>Kontrolfejl for %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Kan ikke finde systemfunktionen %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Installationen var registreret på et andet styresystem.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Aktivering af FreeFileSync donationsudgave mislykkedes.</target>
+
+<source>Incorrect activation key.</source>
+<target>Forkert licens.</target>
<source>Unable to register to receive system messages.</source>
<target>Kunne ikke registrere modtagelse af systembeskeder.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Installationsfilen er ødelagt. Geninstaller FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Kan ikke finde systemfunktionen %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Kan ikke registrere beskeder for %x.</target>
@@ -1693,9 +1852,6 @@ Sikrer processen ved alvorlige fejl.
<source>Cannot copy attributes from %x to %y.</source>
<target>Kan ikke kopiere attributter fra %x til %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Filtypen %x understøttes ikke:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1738,9 +1894,6 @@ Sikrer processen ved alvorlige fejl.
<source>Cannot change process I/O priorities.</source>
<target>Kan ikke ændre I/O prioriteter.</target>
-<source>Error Code %x:</source>
-<target>Fejlkode %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Check papirkurv fejlede for mappen %x.</target>
@@ -1750,9 +1903,6 @@ Sikrer processen ved alvorlige fejl.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Indstillingsfilen %x er ikke komplet. Manglende elementer sættes til standard.</target>
-<source>Internet access failed.</source>
-<target>Ingen internetadgang.</target>
-
<source>Prepare installation</source>
<target>Forbereder installering</target>
@@ -1822,18 +1972,12 @@ Sikrer processen ved alvorlige fejl.
<source>Edit with FreeFileSync</source>
<target>Rediger med FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Tak for støtten!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Denne FreeFileSync for donorer har nået den daglige installationsgrænse.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Vil du hente den normale FreeFileSync nu?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Portable udgaven kan ikke installeres i den valgte mappe.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Installer normalt, eller vælg en anden mappe.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Baggrundsinstallation er kun mulig med FreeFileSync's donationsudgave.</target>
+
diff --git a/FreeFileSync/Build/Languages/dutch.lng b/FreeFileSync/Build/Languages/dutch.lng
index ff73514a..c28c07aa 100755
--- a/FreeFileSync/Build/Languages/dutch.lng
+++ b/FreeFileSync/Build/Languages/dutch.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Standaardwaarden instellen voor synchronisatierichtingen: oude bestanden worden overschreven door nieuwere.</target>
-<source>Creating folder %x</source>
-<target>Map %x maken</target>
-
<source>Creating file %x</source>
<target>Bestand %x maken</target>
+<source>Creating folder %x</source>
+<target>Map %x maken</target>
+
<source>Creating symbolic link %x</source>
<target>Symbolische link %x maken</target>
@@ -62,7 +62,7 @@
<target>Een mappad wordt na %x verwacht.</target>
<source>Syntax error</source>
-<target>Syntaxisfout</target>
+<target>Syntaxis fout</target>
<source>Cannot find file %x.</source>
<target>Kan bestand %x niet vinden.</target>
@@ -77,7 +77,7 @@
<target>Ongelijk aantal linker- en rechter- mappen opgegeven.</target>
<source>The config file must not contain settings at directory pair level when directories are set via command line.</source>
-<target>Het configuratiebestand mag geen instellingen op mappaarniveau bevatten, als de directories via de opdrachtregel zijn ingesteld.</target>
+<target>Het configuratiebestand mag geen instellingen op mappaarniveau bevatten, als de mappen via de opdrachtregel zijn ingesteld.</target>
<source>Directories cannot be set for more than one configuration file.</source>
<target>Mappen kunnen niet worden gebruikt voor meer dan één configuratiebestand.</target>
@@ -104,7 +104,7 @@
<target>Een willekeurig aantal FreeFileSync. ffs_gui en/of .ffs_batch configuratiebestanden.</target>
<source>Any number of alternative directory pairs for at most one config file.</source>
-<target>Een willekeurig aantal alternatieve directoryparen voor maximaal een configuratiebestand.</target>
+<target>Een willekeurig aantal alternatieve mapparen voor maximaal een configuratiebestand.</target>
<source>Open configuration for editing without executing it.</source>
<target>Open configuratie voor het bewerken, zonder het uit te voeren.</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Indien deze fout wordt genegeerd zullen de mappen als leeg beschouwd worden. Ontbrekende mappen worden automatisch aangemaakt indien nodig.</target>
-<source>A folder input field is empty.</source>
-<target>Invoerveld van een map is leeg.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>De betreffende map wordt als leeg beschouwd.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>De volgende mappaden zijn afhankelijk van elkaar:</target>
-
<source>File %x has an invalid date.</source>
<target>Het bestand %x heeft een ongeldige datum.</target>
<source>Date:</source>
<target>Datum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>De bestanden %x hebben hetzelfde datum, maar de grootte is verschillend.</target>
+<source>Files have the same date but a different size.</source>
+<target>Bestanden hebben dezelfde datum maar verschillende groottes.</target>
<source>Size:</source>
<target>Grootte:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>De vergelijking van de uitgesloten bestanden %x werd overgeslagen.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>De inhoud vergelijking voor uitgesloten bestanden werd overgeslagen.</target>
<source>Items differ in attributes only</source>
<target>De items verschillen alleen in de kenmerken</target>
@@ -152,7 +143,7 @@
<target>Maak bestandslijst...</target>
<source>Fail-safe file copy</source>
-<target>Fail-safe bestand kopieëren</target>
+<target>Fail-safe bestand kopiëren</target>
<source>Enabled</source>
<target>Ingeschakeld</target>
@@ -161,10 +152,10 @@
<target>Uitgeschakeld</target>
<source>Copy locked files</source>
-<target>Vergrendelde bestanden kopieëren</target>
+<target>Vergrendelde bestanden kopiëren</target>
<source>Copy file access permissions</source>
-<target>Toegangsmachtigingen om bestanden te kopieëren</target>
+<target>Toegangsmachtigingen om bestanden te kopiëren</target>
<source>File time tolerance</source>
<target>Tolerantie bestandstijd</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Start vergelijking</target>
+<source>A folder input field is empty.</source>
+<target>Invoerveld van een map is leeg.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>De betreffende map wordt als leeg beschouwd.</target>
+
+<source>Exclude:</source>
+<target>Uitgesloten:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Een basismap van een mappaar is opgenomen in de andere.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>De map moet worden uitgesloten van synchronisatie via filter.</target>
+
<source>Calculating sync directions...</source>
<target>Berekenen sync richtingen...</target>
@@ -212,7 +218,7 @@
<target>Beide zijden zijn gelijk</target>
<source>Conflict/item cannot be categorized</source>
-<target>Conflict/item niet kan worden gecategoriseerd</target>
+<target>Conflict/item kan niet worden gecategoriseerd</target>
<source>Copy new item to left</source>
<target>Kopieer nieuw item naar links</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Update kenmerken aan de rechterzijde</target>
-<source>Cannot write permissions of %x.</source>
-<target>Kan de aangegeven machtigingen van %x niet schrijven.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Deze bewerking wordt niet ondersteund voor verschillende basis maptypen.</target>
-
<source>Cannot write file %x.</source>
<target>Kan bestand %x niet schrijven.</target>
@@ -267,39 +267,45 @@ Verwacht: %x bytes
Werkelijk: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Kan de aangegeven machtigingen van %x niet schrijven.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Deze bewerking wordt niet ondersteund voor verschillende basis maptypen.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Kan de symbolische koppeling %x niet kopiëren naar %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Het bestand %x kan niet naar %y verplaatst worden.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Kan de folder %x niet opsommen.</target>
+<source>Unable to connect to %x.</source>
+<target>Kan geen verbinding maken met %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Kan de bestandskenmerken van %x niet lezen.</target>
+<source>Failed to get information about server %x.</source>
+<target>Fout bij het ophalen van informatie over server %x.</target>
-<source>Cannot find %x.</source>
-<target>Kan %x niet vinden.</target>
+<source>Cannot open directory %x.</source>
+<target>Kan de map %x niet openen.</target>
-<source>Cannot open file %x.</source>
-<target>Het bestand %x kan niet geopend worden.</target>
+<source>Cannot read directory %x.</source>
+<target>Kan de map %x niet lezen.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Kan de bestandskenmerken van %x niet lezen.</target>
<source>Cannot read file %x.</source>
<target>Kan het bestand %x niet lezen.</target>
-<source>Cannot find device %x.</source>
-<target>Kan apparaat %x niet vinden.</target>
-
<source>Cannot create directory %x.</source>
<target>Kan de map %x niet maken.</target>
-<source>Cannot delete directory %x.</source>
-<target>De map %x kan niet verwijderd worden.</target>
-
<source>Cannot delete file %x.</source>
<target>Kan bestand %x niet verwijderen.</target>
+<source>Cannot delete directory %x.</source>
+<target>De map %x kan niet verwijderd worden.</target>
+
<source>Cannot write modification time of %x.</source>
<target>De modificatie-tijd van %x kan niet geschreven worden.</target>
@@ -309,31 +315,73 @@ Werkelijk: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Kan de symbolische koppeling %x niet oplossen.</target>
-<source>Cannot open directory %x.</source>
-<target>Kan de folder %x niet openen.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Niet in staat om %x naar de prullenbak te verplaatsen.</target>
+
+<source>Cannot open file %x.</source>
+<target>Het bestand %x kan niet geopend worden.</target>
+
+<source>Cannot find device %x.</source>
+<target>Kan apparaat %x niet vinden.</target>
+
+<source>Cannot find %x.</source>
+<target>Kan %x niet vinden.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Dit itemtype %x wordt niet ondersteund:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Kan de symbolische koppeling %x niet verwijderen.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Kan de vrije schijfruimte voor %x niet bepalen.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Niet in staat om %x naar de prullenbak te verplaatsen.</target>
-
<source>Incorrect command line:</source>
<target>Onjuiste opdrachtregel:</target>
-<source>Error Code %x:</source>
-<target>Foutcode %x:</target>
+<source>Error Code %x</source>
+<target>Foutcode %x</target>
-<source>Unable to connect to %x.</source>
-<target>Kan geen verbinding maken met %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>De server ondersteunt geen verificatie via %x.</target>
+
+<source>Required:</source>
+<target>Vereist:</target>
+
+<source>Unable to access %x.</source>
+<target>Geen toegang tot %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Bewerking na 1 seconde verlopen.</pluralform>
+<pluralform>Bewerking na %x seconden verlopen.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Kan niet meer dan op 1 verbinding tegelijk wachten.</pluralform>
+<pluralform>Kan niet meer dan op %x verbindingen tegelijk wachten.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Actieve verbindingen: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Fout bij het openen van SFTP kanaalnummer %x.</target>
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
</source>
<target>
-<pluralform>1 Byte</pluralform>
-<pluralform>%x Bytes</pluralform>
+<pluralform>1 byte</pluralform>
+<pluralform>%x bytes</pluralform>
</target>
<source>%x MB</source>
@@ -357,14 +405,20 @@ Werkelijk: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Databasebestand %x bestaat nog niet.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Databasebestand is beschadigd:</target>
-<source>Database files do not share a common session.</source>
-<target>Database bestanden kunnen geen gemeenschappelijke sessie delen.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>De databasebestanden bevatten nog geen informatie over de laatste synchronisatie.</target>
+
+<source>Loading file %x...</source>
+<target>Laden van bestand %x...</target>
+
+<source>Saving file %x...</source>
+<target>Opslaan van bestand %x...</target>
<source>Searching for folder %x...</source>
-<target>Zoek naar map %x...</target>
+<target>Zoeken naar map %x...</target>
<source>Timeout while searching for folder %x.</source>
<target>Time-out tijdens het zoeken naar de map %x.</target>
@@ -373,7 +427,7 @@ Werkelijk: %y bytes
<target>Kan geen procesinformatie krijgen.</target>
<source>Waiting while directory is locked:</source>
-<target>Wachten terwijl de direcory is vergrendeld:</target>
+<target>Wachten terwijl de map is vergrendeld:</target>
<source>Lock owner:</source>
<target>Vergrendel eigenaar:</target>
@@ -390,9 +444,6 @@ Werkelijk: %y bytes
<source>Detecting abandoned lock...</source>
<target>Opsporen van verlaten vergrendeling...</target>
-<source>Saving file %x...</source>
-<target>Opslaan van bestand %x...</target>
-
<source>Items processed:</source>
<target>Items verwerkt:</target>
@@ -413,8 +464,8 @@ Werkelijk: %y bytes
<pluralform>%x threads</pluralform>
</source>
<target>
-<pluralform>1 Thread</pluralform>
-<pluralform>%x Threads</pluralform>
+<pluralform>1 thread</pluralform>
+<pluralform>%x threads</pluralform>
</target>
<source>Scanning:</source>
@@ -433,13 +484,13 @@ Werkelijk: %y bytes
<target>Openen met standaardtoepassing</target>
<source>Browse directory</source>
-<target>Blader in directory</target>
+<target>Blader in map</target>
<source>Cannot access the Volume Shadow Copy Service.</source>
<target>Kan geen toegang krijgen tot de Volume Shadow Copy Service.</target>
<source>Please run the 64-bit version of FreeFileSync to create shadow copies on this system.</source>
-<target>Gelieve de 64-bits versie van FreeFileSync te gebruiken om schaduwkopieën te maken op dit systeem.</target>
+<target>Gelieve de 64-bits versie van FreeFileSync te gebruiken om schaduwkopiën te maken op dit systeem.</target>
<source>Cannot determine volume name for %x.</source>
<target>Kan de volumenaam niet vaststellen voor %x.</target>
@@ -549,10 +600,10 @@ De opdracht wordt geactiveerd als:
<target>Het volgende pad ondersteunt geen map bewaking:</target>
<source>Directory monitoring active</source>
-<target>Directory controle actief</target>
+<target>Mapcontrole actief</target>
<source>Waiting until all directories are available...</source>
-<target>Wacht totdat alle directories beschikbaar zijn...</target>
+<target>Wacht totdat alle mappen beschikbaar zijn...</target>
<source>&Restore</source>
<target>&Herstellen</target>
@@ -647,14 +698,23 @@ De opdracht wordt geactiveerd als:
<source>Not enough free disk space available in:</source>
<target>Er is onvoldoende vrije schijfruimte beschikbaar in:</target>
-<source>Required:</source>
-<target>Vereist:</target>
-
<source>Available:</source>
<target>Beschikbaar:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Meerdere map-paren schrijven naar een gemeenschappelijk submap. Controleer uw configuratie.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Sommige bestanden worden gesynchroniseerd als onderdeel van meerdere basis mappen.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Om conflicten te voorkomen, filters uitsluitingen zodanig instellen dat elke bijgewerkte bestand wordt beschouwd als slechts één basismap.</target>
+
+<source>Versioning folder:</source>
+<target>Map versiebeheer:</target>
+
+<source>Base folder:</source>
+<target>Basismap:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>De map versiebeheer worden gesynchroniseerd omdat het is opgenomen in een basismap.</target>
<source>Synchronizing folder pair:</source>
<target>Synchroniseren van map-paar:</target>
@@ -662,6 +722,9 @@ De opdracht wordt geactiveerd als:
<source>Generating database...</source>
<target>Genereren database...</target>
+<source>Loading...</source>
+<target>Laden...</target>
+
<source>job name</source>
<target>taaknaam</target>
@@ -726,7 +789,7 @@ De opdracht wordt geactiveerd als:
<target>Map</target>
<source>Symlink</source>
-<target>Symlink</target>
+<target>Symbolische link</target>
<source>Full path</source>
<target>Volledig pad</target>
@@ -759,7 +822,7 @@ De opdracht wordt geactiveerd als:
<target>Lokale synchronisatie-instellingen</target>
<source>Local filter</source>
-<target>Lokale filter</target>
+<target>Lokaal filter</target>
<source>Active</source>
<target>Actief</target>
@@ -771,7 +834,7 @@ De opdracht wordt geactiveerd als:
<target>Lokale instellingen verwijderen</target>
<source>Clear local filter</source>
-<target>Verwijder lokale filter</target>
+<target>Verwijder lokaal filter</target>
<source>Copy</source>
<target>Kopieer</target>
@@ -785,15 +848,6 @@ De opdracht wordt geactiveerd als:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Selecteer een map op een lokaal bestandssysteem, netwerk of een MTP-apparaat.</target>
-<source>SFTP folder</source>
-<target>SFTP map</target>
-
-<source>Select SFTP folder</source>
-<target>Selecteer SFTP map</target>
-
-<source>Select alternative folder type</source>
-<target>Selecteer alternatieve map type</target>
-
<source>&New</source>
<target>&Nieuw</target>
@@ -839,11 +893,8 @@ De opdracht wordt geactiveerd als:
<source>&Tools</source>
<target>&Gereedschap</target>
-<source>&Check for new version</source>
-<target>&Controleren op nieuwe versie</target>
-
-<source>&Check now</source>
-<target>&Nu conroleren</target>
+<source>&Check for updates now</source>
+<target>&Controleren op updates</target>
<source>Check &automatically once a week</source>
<target>Controleer een keer per week &automatisch</target>
@@ -863,6 +914,9 @@ De opdracht wordt geactiveerd als:
<source>Remove folder pair</source>
<target>Verwijder map-paar</target>
+<source>Access online storage</source>
+<target>Toegang tot online opslag</target>
+
<source>Swap sides</source>
<target>Verwisselen van zijden</target>
@@ -906,7 +960,7 @@ De opdracht wordt geactiveerd als:
<target>Aantal bestanden en mappen die worden gemaakt</target>
<source>Total bytes to copy</source>
-<target>Totaal aantal te kopieëren bytes</target>
+<target>Totaal aantal te kopiëren bytes</target>
<source>Folder pair:</source>
<target>Mappaar:</target>
@@ -950,9 +1004,6 @@ De opdracht wordt geactiveerd als:
<source>Include:</source>
<target>Inclusief:</target>
-<source>Exclude:</source>
-<target>Uitgesloten:</target>
-
<source>Show examples</source>
<target>Toon voorbeelden</target>
@@ -1036,8 +1087,11 @@ De opdracht wordt geactiveerd als:
<source>Arrange folder pair</source>
<target>Rangschik folder-paar</target>
-<source>Enter your SFTP login details:</source>
-<target>Vul uw SFTP login gegevens in:</target>
+<source>Enter your login details:</source>
+<target>Logingegevens invoeren:</target>
+
+<source>Connection type:</source>
+<target>Verbindingstype:</target>
<source>Server name or IP address:</source>
<target>Servernaam of IP-adres:</target>
@@ -1045,11 +1099,29 @@ De opdracht wordt geactiveerd als:
<source>Port:</source>
<target>Poort:</target>
+<source>Encryption:</source>
+<target>Codering:</target>
+
+<source>&Disabled</source>
+<target>&Uitgeschakeld</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Expliciete SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Verificatie:</target>
+
+<source>&Password</source>
+<target>&Wachtwoord</target>
+
+<source>&Key file</source>
+<target>&Sleutelbestand</target>
+
<source>User name:</source>
<target>Gebruikersnaam:</target>
-<source>Password:</source>
-<target>Wachtwoord:</target>
+<source>Private key file:</source>
+<target>Prive-sleutel bestand:</target>
<source>&Show password</source>
<target>&Toon wachtwoord</target>
@@ -1057,6 +1129,27 @@ De opdracht wordt geactiveerd als:
<source>Directory on server:</source>
<target>Map op de server:</target>
+<source>Performance improvements:</source>
+<target>Prestatieverbeteringen:</target>
+
+<source>How to get best performance?</source>
+<target>Hoe kom je aan de beste prestaties?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH verbindingen om mappen te lezen:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Voorgesteld bereik: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanalen per verbinding:</target>
+
+<source>Detect server limit</source>
+<target>Gedetecteerd server limiet</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 verbindingen x 10 kanalen = 20 keer sneller lezen van de mappen</target>
+
<source>Select a directory on the server:</source>
<target>Selecteer een map op de server:</target>
@@ -1143,7 +1236,7 @@ Copy to a temporary file (*.ffs_tmp) before overwriting target.
This guarantees a consistent state even in case of a serious error.
</source>
<target>
-Kopieëren naar een tijdelijk bestand (*.ffs_tmp) voordat het doel wordt overschreven.
+Kopiëren naar een tijdelijk bestand (*.ffs_tmp) voordat het doel wordt overschreven.
Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
</target>
@@ -1151,7 +1244,7 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<target>(aanbevolen)</target>
<source>Copy shared or locked files using the Volume Shadow Copy Service.</source>
-<target>Gedeelde of vergrendelde bestanden met behulp van de Volume Schaduw copy-Service kopieëren.</target>
+<target>Gedeelde of vergrendelde bestanden met behulp van de Volume Schaduw copy-Service kopiëren.</target>
<source>(requires administrator rights)</source>
<target>(vereist beheerdersrechten)</target>
@@ -1186,6 +1279,9 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Source code written in C++ using:</source>
<target>Broncode werd in C++ geschreven met:</target>
+<source>Donation details</source>
+<target>Donatie details</target>
+
<source>If you like FreeFileSync:</source>
<target>Als FreeFileSync je bevalt:</target>
@@ -1195,8 +1291,8 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Feedback and suggestions are welcome</source>
<target>Feedback en suggesties zijn welkom</target>
-<source>Homepage</source>
-<target>Homepage</target>
+<source>Home page</source>
+<target>Startpagina</target>
<source>Email</source>
<target>Email</target>
@@ -1207,8 +1303,26 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Many thanks for localization:</source>
<target>Hartelijk dank voor de lokalisatie:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Activeer de FreeFileSync Donatie Editie door één van de volgende manieren:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Activeer nu via internet:</target>
+
+<source>Activate online</source>
+<target>Online activeren</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. een offline activatie sleutel ophalen van de volgende URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Naar klembord kopiëren</target>
+
+<source>Enter activation key:</source>
+<target>Voer activeringscode in:</target>
+
+<source>Activate offline</source>
+<target>Activeer offline</target>
<source>Save as Batch Job</source>
<target>Opslaan als batch opdracht</target>
@@ -1225,6 +1339,9 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Select Time Span</source>
<target>Selecteer tijdsduur</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync donatie Editie</target>
+
<source>&Options</source>
<target>&Opties</target>
@@ -1246,14 +1363,14 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Overview</source>
<target>Overzicht</target>
-<source>&Download</source>
-<target>&Downloaden</target>
+<source>&Show details</source>
+<target>&Toon details</target>
<source>A new version of FreeFileSync is available:</source>
<target>Er is een nieuwe versie van FreeFileSync beschikbaar:</target>
<source>Local path not available for %x.</source>
-<target>Lokale pad niet beschikbaar voor %x.</target>
+<target>Lokaal pad niet beschikbaar voor %x.</target>
<source>Confirm</source>
<target>Bevestigen</target>
@@ -1275,8 +1392,8 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<pluralform>%x directories</pluralform>
</source>
<target>
-<pluralform>1 directory</pluralform>
-<pluralform>%x directories</pluralform>
+<pluralform>1 map</pluralform>
+<pluralform>%x mappen</pluralform>
</target>
<source>
@@ -1322,10 +1439,10 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<target>&Verwijderen</target>
<source>Include all</source>
-<target>Omvat alle</target>
+<target>Omvat alles</target>
<source>Exclude all</source>
-<target>Alle uitgesloten</target>
+<target>Alles uitgesloten</target>
<source>Show icons:</source>
<target>Pictogrammen weergeven:</target>
@@ -1361,7 +1478,7 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<target>Wilt u de wijzigingen in %x opslaan?</target>
<source>Never save &changes</source>
-<target>&wijzigingen nooit opslaan</target>
+<target>&Wijzigingen nooit opslaan</target>
<source>Do&n't save</source>
<target>&Niet opslaan</target>
@@ -1412,7 +1529,7 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<target>Toon bestanden die worden bijgewerkt aan de rechterzijde</target>
<source>Show files that won't be copied</source>
-<target>Bestanden weergeven die niet gekopieerd worden</target>
+<target>Bestanden weergeven die niet gekopiërd worden</target>
<source>Show filtered or temporarily excluded files</source>
<target>Toon gefilterde of tijdelijk uitgesloten bestanden</target>
@@ -1486,8 +1603,17 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Log</source>
<target>Logboek</target>
-<source>Loading...</source>
-<target>Laden...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Installatiebestanden zijn beschadigd. Installeer FreeFileSync opnieuw.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Dank u, %x, voor uw donatie en ondersteuning!</target>
+
+<source>Password:</source>
+<target>Wachtwoord:</target>
+
+<source>Key password:</source>
+<target>Sleutel wachtwoord:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>&Show</source>
<target>&Toon</target>
+<source>Downloading update...</source>
+<target>Downloaden van update...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identificeer gelijke bestanden door het vergelijken van wijzigingen in tijd en grootte.</target>
@@ -1562,7 +1691,7 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<target>Maak een spiegel-backup van de linkermap, door de rechtermap aan te aanpassen.</target>
<source>Copy new and updated files to the right folder.</source>
-<target>Nieuwe en bijgewerkte bestanden naar de rechter map kopieëren.</target>
+<target>Nieuwe en bijgewerkte bestanden naar de rechter map kopiëren.</target>
<source>Configure your own synchronization rules.</source>
<target>Configureer uw eigen synchronisatie regels.</target>
@@ -1639,12 +1768,33 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Percentage</source>
<target>Percentage</target>
+<source>Failed to retrieve update information.</source>
+<target>Het ophalen van de update informatie is mislukt.</target>
+
+<source>Automatic updates:</source>
+<target>Automatische updates:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Vereist FreeFileSync donatie Editie</target>
+
<source>Check for Program Updates</source>
<target>Controleer voor programma-updates</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Auto-update nu of handmatig downloaden vanaf de startpagina FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Auto-update</target>
+
+<source>&Home page</source>
+<target>&Startpagina</target>
+
<source>Download now?</source>
<target>Nu downloaden?</target>
+<source>&Download</source>
+<target>&Downloaden</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync is actueel.</target>
@@ -1657,14 +1807,20 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Consistency check failed for %x.</source>
<target>Consistentiecontrole mislukt voor %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Kan de systeemfunctie %x niet vinden.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Installatie was geregistreerd op een ander besturingssysteem.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Kan de FreeFileSync donatie editie niet activeren.</target>
+
+<source>Incorrect activation key.</source>
+<target>Onjuiste activeringssleutel.</target>
<source>Unable to register to receive system messages.</source>
<target>Niet in staat om de ontvangen systeemberichten te registreren.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Installatiebestanden zijn beschadigd. Gelieve FreeFileSync opnieuw te installeren.</target>
+<source>Cannot find system function %x.</source>
+<target>Kan de systeemfunctie %x niet vinden.</target>
<source>Unable to register device notifications for %x.</source>
<target>Niet in staat om apparaat meldingen te registreren voor %x.</target>
@@ -1696,9 +1852,6 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Cannot copy attributes from %x to %y.</source>
<target>Kan de attributen van %x niet kopiëren naar %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Dit itemtype %x wordt niet ondersteund:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Configuratiebestand %x is onvolledig. De ontbrekende elementen worden ingesteld op hun standaardwaarden.</target>
-<source>Internet access failed.</source>
-<target>Internettoegang is mislukt.</target>
-
<source>Prepare installation</source>
<target>Installatie voorbereiden</target>
@@ -1822,18 +1972,12 @@ Dit garandeert een consistente status zelfs in het geval van een ernstige fout.
<source>Edit with FreeFileSync</source>
<target>Bewerken met FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Bedankt voor uw donatie en ondersteuning!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Dit FreeFileSync installatie programma voor donateurs heeft zijn dagelijkse installatielimiet bereikt.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Nu de reguliere versie van FreeFileSync vanaf de homepage downloaden?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>De mobiele versie kan niet in de geselecteerde map geinstalleerd worden.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Kies voor een lokale installatie of selecteer een andere map voor de installatie.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>De stille installatie-modus is alleen beschikbaar in de FreeFileSync donatie editie.</target>
+
diff --git a/FreeFileSync/Build/Languages/english_uk.lng b/FreeFileSync/Build/Languages/english_uk.lng
index 648076bf..ccacb1f7 100755
--- a/FreeFileSync/Build/Languages/english_uk.lng
+++ b/FreeFileSync/Build/Languages/english_uk.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Setting default synchronisation directions: Old files will be overwritten with newer files.</target>
-<source>Creating folder %x</source>
-<target>Creating folder %x</target>
-
<source>Creating file %x</source>
<target>Creating file %x</target>
+<source>Creating folder %x</source>
+<target>Creating folder %x</target>
+
<source>Creating symbolic link %x</source>
<target>Creating symbolic link %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</target>
-<source>A folder input field is empty.</source>
-<target>A folder input field is empty.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>The corresponding folder will be considered as empty.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>The following folder paths are dependent from each other:</target>
-
<source>File %x has an invalid date.</source>
<target>File %x has an invalid date.</target>
<source>Date:</source>
<target>Date:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Files %x have the same date but a different size.</target>
+<source>Files have the same date but a different size.</source>
+<target>Files have the same date but a different size.</target>
<source>Size:</source>
<target>Size:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Content comparison was skipped for excluded files %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Content comparison was skipped for excluded files.</target>
<source>Items differ in attributes only</source>
<target>Items differ in attributes only</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Starting comparison</target>
+<source>A folder input field is empty.</source>
+<target>A folder input field is empty.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>The corresponding folder will be considered as empty.</target>
+
+<source>Exclude:</source>
+<target>Exclude:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>One base folder of a folder pair is contained in the other one.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>The folder should be excluded from synchronisation via filter.</target>
+
<source>Calculating sync directions...</source>
<target>Calculating sync directions...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Update attributes on right</target>
-<source>Cannot write permissions of %x.</source>
-<target>Cannot write permissions of %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operation not supported for different base folder types.</target>
-
<source>Cannot write file %x.</source>
<target>Cannot write file %x.</target>
@@ -267,38 +267,44 @@ Expected: %x bytes
Actual: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Cannot write permissions of %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operation not supported for different base folder types.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Cannot copy symbolic link %x to %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Cannot move file %x to %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Cannot enumerate directory %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Unable to connect to %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Cannot read file attributes of %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Failed to get information about server %x.</target>
-<source>Cannot find %x.</source>
-<target>Cannot find %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Cannot open directory %x.</target>
-<source>Cannot open file %x.</source>
-<target>Cannot open file %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Cannot read directory %x.</target>
<source>Cannot read file %x.</source>
<target>Cannot read file %x.</target>
-<source>Cannot find device %x.</source>
-<target>Cannot find device %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Cannot create directory %x.</target>
+<source>Cannot delete file %x.</source>
+<target>Cannot delete file %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>Cannot delete directory %x.</target>
-<source>Cannot delete file %x.</source>
-<target>Cannot delete file %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Cannot read file attributes of %x.</target>
<source>Cannot write modification time of %x.</source>
<target>Cannot write modification time of %x.</target>
@@ -309,23 +315,65 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Cannot resolve symbolic link %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Cannot open directory %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Unable to move %x to the recycle bin.</target>
+
+<source>Cannot open file %x.</source>
+<target>Cannot open file %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Cannot find device %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Cannot find %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Type of item %x is not supported:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Cannot delete symbolic link %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Cannot determine free disk space for %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Unable to move %x to the recycle bin.</target>
-
<source>Incorrect command line:</source>
<target>Incorrect command line:</target>
-<source>Error Code %x:</source>
-<target>Error Code %x:</target>
+<source>Error Code %x</source>
+<target>Error Code %x</target>
-<source>Unable to connect to %x.</source>
-<target>Unable to connect to %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>The server does not support authentication via %x.</target>
+
+<source>Required:</source>
+<target>Required:</target>
+
+<source>Unable to access %x.</source>
+<target>Unable to access %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Active connections: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Failed to open SFTP channel number %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Database file %x does not yet exist.</target>
-<source>Database file is corrupt:</source>
-<target>Database file is corrupt:</target>
+<source>Database file is corrupted:</source>
+<target>Database file is corrupted:</target>
-<source>Database files do not share a common session.</source>
-<target>Database files do not share a common session.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>The database files do not yet contain information about the last synchronisation.</target>
+
+<source>Loading file %x...</source>
+<target>Loading file %x...</target>
+
+<source>Saving file %x...</source>
+<target>Saving file %x...</target>
<source>Searching for folder %x...</source>
<target>Searching for folder %x...</target>
@@ -390,9 +444,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Detecting abandoned lock...</target>
-<source>Saving file %x...</source>
-<target>Saving file %x...</target>
-
<source>Items processed:</source>
<target>Elements processed:</target>
@@ -647,14 +698,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Not enough free disk space available in:</target>
-<source>Required:</source>
-<target>Required:</target>
-
<source>Available:</source>
<target>Available:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Multiple folder pairs write to a common subfolder. Please review your configuration.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Some files will be synchronised as part of multiple base folders.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</target>
+
+<source>Versioning folder:</source>
+<target>Versioning folder:</target>
+
+<source>Base folder:</source>
+<target>Base folder:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>The versioning folder will be synchronised because it is contained in a base folder.</target>
<source>Synchronizing folder pair:</source>
<target>Synchronising folder pair:</target>
@@ -662,6 +722,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Generating database...</target>
+<source>Loading...</source>
+<target>Loading...</target>
+
<source>job name</source>
<target>job name</target>
@@ -785,15 +848,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Please select a folder on a local file system, network or an MTP device.</target>
-<source>SFTP folder</source>
-<target>SFTP folder</target>
-
-<source>Select SFTP folder</source>
-<target>Select SFTP folder</target>
-
-<source>Select alternative folder type</source>
-<target>Select alternative folder type</target>
-
<source>&New</source>
<target>&New</target>
@@ -839,11 +893,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&Tools</target>
-<source>&Check for new version</source>
-<target>&Check for new version</target>
-
-<source>&Check now</source>
-<target>&Check now</target>
+<source>&Check for updates now</source>
+<target>&Check for updates now</target>
<source>Check &automatically once a week</source>
<target>Check &automatically once a week</target>
@@ -863,6 +914,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>Remove folder pair</target>
+<source>Access online storage</source>
+<target>Access online storage</target>
+
<source>Swap sides</source>
<target>Swap sides</target>
@@ -950,9 +1004,6 @@ The command is triggered if:
<source>Include:</source>
<target>Include:</target>
-<source>Exclude:</source>
-<target>Exclude:</target>
-
<source>Show examples</source>
<target>Show examples</target>
@@ -1036,8 +1087,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Arrange folder pair</target>
-<source>Enter your SFTP login details:</source>
-<target>Enter your SFTP login details:</target>
+<source>Enter your login details:</source>
+<target>Enter your login details:</target>
+
+<source>Connection type:</source>
+<target>Connection type:</target>
<source>Server name or IP address:</source>
<target>Server name or IP address:</target>
@@ -1045,11 +1099,29 @@ The command is triggered if:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Encryption:</target>
+
+<source>&Disabled</source>
+<target>&Disabled</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicit SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Authentication:</target>
+
+<source>&Password</source>
+<target>&Password</target>
+
+<source>&Key file</source>
+<target>&Key file</target>
+
<source>User name:</source>
<target>User name:</target>
-<source>Password:</source>
-<target>Password:</target>
+<source>Private key file:</source>
+<target>Private key file:</target>
<source>&Show password</source>
<target>&Show password</target>
@@ -1057,6 +1129,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>Directory on server:</target>
+<source>Performance improvements:</source>
+<target>Performance improvements:</target>
+
+<source>How to get best performance?</source>
+<target>How to get best performance?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH connections for directory reading:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Suggested range: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP channels per connection:</target>
+
+<source>Detect server limit</source>
+<target>Detect server limit</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 connections x 10 channels = 20 times faster directory reading</target>
+
<source>Select a directory on the server:</source>
<target>Select a directory on the server:</target>
@@ -1186,6 +1279,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Source code written in C++ using:</target>
+<source>Donation details</source>
+<target>Donation details</target>
+
<source>If you like FreeFileSync:</source>
<target>If you like FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Feedback and suggestions are welcome</target>
-<source>Homepage</source>
-<target>Homepage</target>
+<source>Home page</source>
+<target>Home page</target>
<source>Email</source>
<target>E-mail</target>
@@ -1207,8 +1303,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Many thanks for localisation:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Activate the FreeFileSync Donation Edition by one of the following methods:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Activate via internet now:</target>
+
+<source>Activate online</source>
+<target>Activate online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Retrieve an offline activation key from the following URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copy to clipboard</target>
+
+<source>Enter activation key:</source>
+<target>Enter activation key:</target>
+
+<source>Activate offline</source>
+<target>Activate offline</target>
<source>Save as Batch Job</source>
<target>Save as Batch Job</target>
@@ -1225,6 +1339,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Select Time Span</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Options</target>
@@ -1246,8 +1363,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Overview</target>
-<source>&Download</source>
-<target>&Download</target>
+<source>&Show details</source>
+<target>&Show details</target>
<source>A new version of FreeFileSync is available:</source>
<target>A new version of FreeFileSync is available:</target>
@@ -1486,8 +1603,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Loading...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Installation files are corrupted. Please reinstall FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Thank you, %x, for your donation and support!</target>
+
+<source>Password:</source>
+<target>Password:</target>
+
+<source>Key password:</source>
+<target>Key password:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Show</target>
+<source>Downloading update...</source>
+<target>Downloading update...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identify equal files by comparing modification time and size.</target>
@@ -1639,12 +1768,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Percentage</target>
+<source>Failed to retrieve update information.</source>
+<target>Failed to retrieve update information.</target>
+
+<source>Automatic updates:</source>
+<target>Automatic updates:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Requires FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Check for Program Updates</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Auto-update now or download manually from the FreeFileSync home page?</target>
+
+<source>&Auto-update</source>
+<target>&Auto-update</target>
+
+<source>&Home page</source>
+<target>&Home page</target>
+
<source>Download now?</source>
<target>Download now?</target>
+<source>&Download</source>
+<target>&Download</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync is up to date.</target>
@@ -1657,14 +1807,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Consistency check failed for %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Cannot find system function %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Installation was registered on a different operating system.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Failed to activate FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Incorrect activation key.</target>
<source>Unable to register to receive system messages.</source>
<target>Unable to register to receive system messages.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Installation files are corrupt. Please reinstall FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Cannot find system function %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Unable to register device notifications for %x.</target>
@@ -1696,9 +1852,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Cannot copy attributes from %x to %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Type of item %x is not supported:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Configuration file %x is incomplete. The missing elements will be set to their default values.</target>
-<source>Internet access failed.</source>
-<target>Internet access failed.</target>
-
<source>Prepare installation</source>
<target>Prepare installation</target>
@@ -1822,18 +1972,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Edit with FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Thanks for your donation and support!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>This FreeFileSync installer for donors has reached its daily installation limit.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Download the regular version from the FreeFileSync homepage now?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>The portable version cannot install into the selected folder.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Please choose the local installation type or select a different folder for installation.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>The silent installation mode is only available in the FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/finnish.lng b/FreeFileSync/Build/Languages/finnish.lng
index d09b1e2c..5ec18071 100755
--- a/FreeFileSync/Build/Languages/finnish.lng
+++ b/FreeFileSync/Build/Languages/finnish.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Asetetaan oletussuunta täsmäytykselle: vanhat tiedostot korvataan uudemilla tiedostoilla.</target>
-<source>Creating folder %x</source>
-<target>Luodaan hakemisto %x</target>
-
<source>Creating file %x</source>
<target>Luodaan tiedosto %x</target>
+<source>Creating folder %x</source>
+<target>Luodaan hakemisto %x</target>
+
<source>Creating symbolic link %x</source>
<target>Luodaan pikakuvake %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Hakemistot luodaan tyhjinä jos virhe ohitetaan. Puuttuvat hakemistot luodaan tarvittaessa.</target>
-<source>A folder input field is empty.</source>
-<target>Hakemiston syötekenttä on tyhjä.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Vastaava hakemisto tulkitaan tyhjäksi.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Nämä polut ovat riippuvaisia toisistaan:</target>
-
<source>File %x has an invalid date.</source>
<target>Tiedostolla %x on virheellinen päiväys.</target>
<source>Date:</source>
<target>Pvm:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Tiedostoilla %x on sama päiväys, mutta eri koko.</target>
+<source>Files have the same date but a different size.</source>
+<target>Tiedostojen päiväys täsmäämutta koke ei.</target>
<source>Size:</source>
<target>Koko:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Sisällön vertailu sivutettiin poissuljetuille tiedostoille %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Sisällön tarkastus ohitettiin, tiedosto suljettu pois.</target>
<source>Items differ in attributes only</source>
<target>Kohteet eroavat vain ominaisuuksiltaan</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Vertailu alkaa</target>
+<source>A folder input field is empty.</source>
+<target>Hakemiston syötekenttä on tyhjä.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Vastaava hakemisto tulkitaan tyhjäksi.</target>
+
+<source>Exclude:</source>
+<target>Sulje pois:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Hakemiston yksi juurihakemisto sisältyy jo toiseen.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Sulje hakemisto pois käyttämällä suodinta.</target>
+
<source>Calculating sync directions...</source>
<target>Lasketaan täsmäytyksen suuntaa...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Päivitä määritteet oikealla</target>
-<source>Cannot write permissions of %x.</source>
-<target>Ei voi tallentaa %x:n oikeuksia.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Toiminto ei tue erilaisia lähdehakemistoja.</target>
-
<source>Cannot write file %x.</source>
<target>Tiedoston %x kirjoittaminen ei onnistu.</target>
@@ -267,39 +267,45 @@ Oletettu: %x tavua
Todellinen: %y tavua
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Ei voi tallentaa %x:n oikeuksia.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Toiminto ei tue erilaisia lähdehakemistoja.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Pikakuvike %x - %y kopiointi epäonnistui.</target>
<source>Cannot move file %x to %y.</source>
<target>Tiedostoa %x ei voida siirtää kohtaan %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Hakemistoa %x ei voi luetella.</target>
+<source>Unable to connect to %x.</source>
+<target>Yhteyttä %x:n ei voi luoda.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Tiedoston %x määritteitä ei voitu lukea.</target>
+<source>Failed to get information about server %x.</source>
+<target>Palvelimen %x tietoja ei saatu.</target>
-<source>Cannot find %x.</source>
-<target>%x ei löydy.</target>
+<source>Cannot open directory %x.</source>
+<target>Hakemistoa %x ei voi avata.</target>
-<source>Cannot open file %x.</source>
-<target>Tiedosto %x ei aukea.</target>
+<source>Cannot read directory %x.</source>
+<target>Hekemisto %x on lukukelvoton.</target>
-<source>Cannot read file %x.</source>
-<target>Tiedoston %x lukeminen ei onnistu.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Tiedoston %x määritteitä ei voitu lukea.</target>
-<source>Cannot find device %x.</source>
-<target>Laite %x ei löydy.</target>
+<source>Cannot read file %x.</source>
+<target>Tiedosto %x on lukukelvoton.</target>
<source>Cannot create directory %x.</source>
<target>Hakemistoa %x ei voitu luoda.</target>
-<source>Cannot delete directory %x.</source>
-<target>Hakemistoa %x ei voida poistaa.</target>
-
<source>Cannot delete file %x.</source>
<target>Ei voi poistaa tiedostoa %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Hakemistoa %x ei voida poistaa.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Tiedoston %x aikaleimaa ei voida kirjoittaa.</target>
@@ -309,20 +315,65 @@ Todellinen: %y tavua
<source>Cannot resolve symbolic link %x.</source>
<target>Pikakuvike %x on virheellinen.</target>
-<source>Cannot open directory %x.</source>
-<target>Hakemistoa %x ei voi avata.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x:n siirto Roskakoriin epäonnistui.</target>
+
+<source>Cannot open file %x.</source>
+<target>Tiedosto %x ei aukea.</target>
+
+<source>Cannot find device %x.</source>
+<target>Laite %x ei löydy.</target>
+
+<source>Cannot find %x.</source>
+<target>%x ei löydy.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Kohteen %x tyyppiä ei tueta:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Pikakuvike %x:n poisto ei onnistu.</target>
<source>Cannot determine free disk space for %x.</source>
<target>%x:n vaapaan tilan määrittely ei onnistu.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x:n siirto Roskakoriin epäonnistui.</target>
-
<source>Incorrect command line:</source>
<target>Virheellinen komento:</target>
-<source>Unable to connect to %x.</source>
-<target>Yhteyttä %x:n ei voi luoda.</target>
+<source>Error Code %x</source>
+<target>Virhe %x.</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>Palvelin ei salli tunnistautumista %x:n kautta.</target>
+
+<source>Required:</source>
+<target>Vaadittu:</target>
+
+<source>Unable to access %x.</source>
+<target>Ei saatu yhteyttä %x:n.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Toiminto keskeytyy 1 sekunnin kuluttua.</pluralform>
+<pluralform>Toiminto keskeytyy %x sekunnin kuluttua.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Odottaminen sallittu vain 1 yhteydelle.</pluralform>
+<pluralform>Odottaminen sallittu vain %x yhtäaikaiselle yhteydelle.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktiivinen yhteys: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>SFTP kanava %x ei voitu avata.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -354,11 +405,17 @@ Todellinen: %y tavua
<source>Database file %x does not yet exist.</source>
<target>Tietokantaa %x ei vielä ole.</target>
-<source>Database file is corrupt:</source>
-<target>Tietokanta on viottunut:</target>
+<source>Database file is corrupted:</source>
+<target>Tietokanta on tuhoutunut:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Tietokannasa ei vielä ole tietoja viimeisestä täsmäyksestä.</target>
+
+<source>Loading file %x...</source>
+<target>Ladataan tiedostoa %x...</target>
-<source>Database files do not share a common session.</source>
-<target>Tietokannan tiedostot ovat eri istunnoista.</target>
+<source>Saving file %x...</source>
+<target>Tallennetaan tiedostoa %x...</target>
<source>Searching for folder %x...</source>
<target>Etsitään hakemistoa %x...</target>
@@ -387,9 +444,6 @@ Todellinen: %y tavua
<source>Detecting abandoned lock...</source>
<target>Hylätyn lukituksen etsintä...</target>
-<source>Saving file %x...</source>
-<target>Tallennetaan tiedostoa %x...</target>
-
<source>Items processed:</source>
<target>Osioita käsitelty:</target>
@@ -644,20 +698,32 @@ Käsky suoritetaan jos:
<source>Not enough free disk space available in:</source>
<target>Vapaa levytila ei riitä:</target>
-<source>Required:</source>
-<target>Vaadittu:</target>
-
<source>Available:</source>
<target>Saatavilla:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Useat hakemistoparit tallentaa yhteen alikansioon. Tarkista asetukset.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Jotkut tiedostot täsmäytetään osana useampaa juurihakemistoa.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Ristiriidan välttämiseksi, aseta poisulkeva suodin jotta tiedosto käsitellään vain yhdessä juurihakemistossa.</target>
+
+<source>Versioning folder:</source>
+<target>Versiointi hakemisto:</target>
+
+<source>Base folder:</source>
+<target>Juurihakemisto:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Verioinnin hakemisto täsmäytetään, on osana juurihakemistoa.</target>
<source>Synchronizing folder pair:</source>
<target>Täsmäytetään hakemistoparia:</target>
<source>Generating database...</source>
-<target>Tietokanta luodaan...</target>
+<target>Tietokantaa luodaan...</target>
+
+<source>Loading...</source>
+<target>Lataan...</target>
<source>job name</source>
<target>työnnimi</target>
@@ -782,15 +848,6 @@ Käsky suoritetaan jos:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Valitse kansio joka on paikallinen, verkossa tai MTP laitteella.</target>
-<source>SFTP folder</source>
-<target>SFTP kansio</target>
-
-<source>Select SFTP folder</source>
-<target>Valitse SFTP hakemisto</target>
-
-<source>Select alternative folder type</source>
-<target>Valitse toinen hakemistotyyppi</target>
-
<source>&New</source>
<target>&Uusi</target>
@@ -836,11 +893,8 @@ Käsky suoritetaan jos:
<source>&Tools</source>
<target>&Asetukset</target>
-<source>&Check for new version</source>
-<target>&Hae uusi versio</target>
-
-<source>&Check now</source>
-<target>&Tarkista nyt</target>
+<source>&Check for updates now</source>
+<target>&Etsi päivityksiä nyt</target>
<source>Check &automatically once a week</source>
<target>Tarkista &viikoittain</target>
@@ -860,6 +914,9 @@ Käsky suoritetaan jos:
<source>Remove folder pair</source>
<target>Poista hakemistopari</target>
+<source>Access online storage</source>
+<target>Osoita online taltiota</target>
+
<source>Swap sides</source>
<target>Puoltenvaihto</target>
@@ -947,9 +1004,6 @@ Käsky suoritetaan jos:
<source>Include:</source>
<target>Sisällytä:</target>
-<source>Exclude:</source>
-<target>Sulje pois:</target>
-
<source>Show examples</source>
<target>Näytä esimerkkejä</target>
@@ -1033,8 +1087,11 @@ Käsky suoritetaan jos:
<source>Arrange folder pair</source>
<target>Järjestä hakemistoparit</target>
-<source>Enter your SFTP login details:</source>
-<target>Anna SFTP kirjautumis tietosi:</target>
+<source>Enter your login details:</source>
+<target>Anna kirjautumistietosi:</target>
+
+<source>Connection type:</source>
+<target>Yhteystapa:</target>
<source>Server name or IP address:</source>
<target>Palvelimen nimi ja IP:</target>
@@ -1042,11 +1099,29 @@ Käsky suoritetaan jos:
<source>Port:</source>
<target>Portti:</target>
+<source>Encryption:</source>
+<target>Salaus:</target>
+
+<source>&Disabled</source>
+<target>&Estetty</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explisiittinen SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Todennus:</target>
+
+<source>&Password</source>
+<target>&Salasana</target>
+
+<source>&Key file</source>
+<target>&Avaintiedosto</target>
+
<source>User name:</source>
<target>Käyttäjä:</target>
-<source>Password:</source>
-<target>Salasana:</target>
+<source>Private key file:</source>
+<target>Yksityinen avaintiedosto:</target>
<source>&Show password</source>
<target>&Näytä salasana</target>
@@ -1054,6 +1129,27 @@ Käsky suoritetaan jos:
<source>Directory on server:</source>
<target>Palvelimen hakemisto:</target>
+<source>Performance improvements:</source>
+<target>Suorituskyvyn tehosteet:</target>
+
+<source>How to get best performance?</source>
+<target>Miten saan parhaan suorituskyvyn?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH yhteys hakemistojen lukuun:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Suositeltu: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanavia per yhteys:</target>
+
+<source>Detect server limit</source>
+<target>Tunnista palvelimen rajat</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 yhteyttä x 10 kanavaa = 20 kertaa nopeampi hakemistojen luku</target>
+
<source>Select a directory on the server:</source>
<target>Valitse palvelimelta hakemisto:</target>
@@ -1183,6 +1279,9 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Source code written in C++ using:</source>
<target>Koodattu C++-kielellä käyttäen:</target>
+<source>Donation details</source>
+<target>Lahjoituksen tiedot</target>
+
<source>If you like FreeFileSync:</source>
<target>Jos pidät FreeFileSyncistä:</target>
@@ -1192,7 +1291,7 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Feedback and suggestions are welcome</source>
<target>Palaute ja uudet ehdotukset ovat tervetulleita</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Kotisivu</target>
<source>Email</source>
@@ -1204,8 +1303,26 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Many thanks for localization:</source>
<target>Paljon kiitoksia kääntäjille:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH tidostosiirto protokolla</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Käynnistä FreeFileSyncin Lahjoittajan versiota käyttäen:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Internetin kautta:</target>
+
+<source>Activate online</source>
+<target>Aktivoi netissä</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Hae erillinen aktivointiavain sivulta:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopioi leikepöydälle</target>
+
+<source>Enter activation key:</source>
+<target>Syötä aktivointiavain:</target>
+
+<source>Activate offline</source>
+<target>Aktivoi yhteyttä</target>
<source>Save as Batch Job</source>
<target>Tallenna eräajona</target>
@@ -1222,6 +1339,9 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Select Time Span</source>
<target>Valitse aikajakso</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Lahjoittajan versio</target>
+
<source>&Options</source>
<target>&Asetukset</target>
@@ -1243,8 +1363,8 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Overview</source>
<target>Yleiskatsaus</target>
-<source>&Download</source>
-<target>&Lataa</target>
+<source>&Show details</source>
+<target>&Näytä tarkenteet</target>
<source>A new version of FreeFileSync is available:</source>
<target>FreeFileSyncin uusi versio on saatavilla:</target>
@@ -1483,8 +1603,17 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Log</source>
<target>Loki</target>
-<source>Loading...</source>
-<target>Lataan...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Asennustiedostot ovat viottuneet. Yritä asentaa FreeFileSync uudestaan.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Kiitos %x, arvostan tukeasi ja lahjoitustasi!</target>
+
+<source>Password:</source>
+<target>Salasana:</target>
+
+<source>Key password:</source>
+<target>Pää salasana:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1543,6 +1672,9 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>&Show</source>
<target>&Näytä</target>
+<source>Downloading update...</source>
+<target>Ladataan päivitystä...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Tunnista identtiset tiedostot aikaleimoja ja kokoa vertailemalla.</target>
@@ -1636,12 +1768,33 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Percentage</source>
<target>Prosenttia</target>
+<source>Failed to retrieve update information.</source>
+<target>Päivytyksen noutaminen epäonnistui.</target>
+
+<source>Automatic updates:</source>
+<target>Automaattinen päivitys:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Edellyttää FreeFileSyncin Lahjoittajan versiota</target>
+
<source>Check for Program Updates</source>
<target>Etsi ohjelmaan päivitystä</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Päivitä automaattisesti tai lataa päivitys FreeFileSyncin kotisivulta?</target>
+
+<source>&Auto-update</source>
+<target>&Automattisesti</target>
+
+<source>&Home page</source>
+<target>&Kotisivu</target>
+
<source>Download now?</source>
<target>Ladataanko nyt?</target>
+<source>&Download</source>
+<target>&Lataa</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync on ajan tasalla.</target>
@@ -1654,14 +1807,20 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Consistency check failed for %x.</source>
<target>%x:n yhtenäisyystarkistus epäonnistui.</target>
-<source>Cannot find system function %x.</source>
-<target>Järjestelmäfunktiota %x ei löydy.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Asennus on rekisteröity toiselle käyttöjärjestelmälle.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>FreeFileSyncin Lahjoittajan versio ei aktivoitunut.</target>
+
+<source>Incorrect activation key.</source>
+<target>Väärä aktivointiavain.</target>
<source>Unable to register to receive system messages.</source>
<target>Kirjautuminen järjestelmäviestien vastaanottamiseksi ei onnistu.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Asennustiedosto on virheellinen. Asenna FreeFileSync uudestaan.</target>
+<source>Cannot find system function %x.</source>
+<target>Järjestelmäfunktiota %x ei löydy.</target>
<source>Unable to register device notifications for %x.</source>
<target>%x laiteviestien kirjaaminen ei onnistu.</target>
@@ -1693,9 +1852,6 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Cannot copy attributes from %x to %y.</source>
<target>Ominaisuuksien monistus %x:ltä %y:lle ei onnistu.</target>
-<source>Type of item %x is not supported:</source>
-<target>Kohteen %x tyyppiä ei tueta:</target>
-
<source>%x TB</source>
<target>%x Tt</target>
@@ -1738,9 +1894,6 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Cannot change process I/O priorities.</source>
<target>Prosessin I/O-prioriteetin muutos ei onnistu.</target>
-<source>Error Code %x:</source>
-<target>Virhekoodi %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Roskakorin tarkistus hakemistolle %x epäonnistui.</target>
@@ -1750,9 +1903,6 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Kokoonpanotiedosto %x ladattu vain osittain. Puuttuvat asetetaan oletusarvoihin.</target>
-<source>Internet access failed.</source>
-<target>Ei pääsyä internettiin.</target>
-
<source>Prepare installation</source>
<target>Alusta asennus</target>
@@ -1822,18 +1972,12 @@ Tällä varmistetaan eheys, vaikka vakava virhe tapahtuisi.
<source>Edit with FreeFileSync</source>
<target>Muokkaa FreeFileSync:llä</target>
-<source>Thanks for your donation and support!</source>
-<target>Kiitän tuesta ja lahjoituksista!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Tämä FreeFileSync lahjoittajaverion päivittäinen asennuskiintiö on täyttynyt.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Haluatko ladata vakioversion FreeFileSync-kotisivulta?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Siirretävä versio ei voi asentaa tähän hakemistoon.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Valitse paikallinen asennus tai vaihda asennushakemistoa.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Häiveasennus toimii vain FreeFileSyncin Lahjoittajan versiossa.</target>
+
diff --git a/FreeFileSync/Build/Languages/french.lng b/FreeFileSync/Build/Languages/french.lng
index 6990de54..3419b16e 100755
--- a/FreeFileSync/Build/Languages/french.lng
+++ b/FreeFileSync/Build/Languages/french.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Création du dossier %x</target>
-
<source>Creating file %x</source>
<target>Création du fichier %x</target>
+<source>Creating folder %x</source>
+<target>Création du dossier %x</target>
+
<source>Creating symbolic link %x</source>
<target>Création du lien symbolique %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Si cette erreur est ignorée, les dossiers seront considérés comme vides. Les dossiers manquants seront automatiquement créés si nécessaire.</target>
-<source>A folder input field is empty.</source>
-<target>Une entrée dossier est vide.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Le dossier correspondant sera considéré comme vide.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Les chemins des dossiers suivants dépendent les uns des autres :</target>
-
<source>File %x has an invalid date.</source>
<target>Le fichier %x a une date invalide.</target>
<source>Date:</source>
<target>Date :</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Les fichiers %x ont la même date mais une taille différente.</target>
+<source>Files have the same date but a different size.</source>
+<target></target>
<source>Size:</source>
<target>Taille :</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>La comparaison du contenu a été ignorée pour les fichiers exclus %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target></target>
<source>Items differ in attributes only</source>
<target>Seuls les attributs des éléments diffèrent</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Comparaison en cours</target>
+<source>A folder input field is empty.</source>
+<target>Une entrée dossier est vide.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Le dossier correspondant sera considéré comme vide.</target>
+
+<source>Exclude:</source>
+<target>Exclure :</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target></target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target></target>
+
<source>Calculating sync directions...</source>
<target>Evaluation du sens des synchronisations ...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Mise à jour des attributs à droite</target>
-<source>Cannot write permissions of %x.</source>
-<target>Impossible d'écrire les permissions de %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Opération non prise en charge pour dee dossiers de base de types différents.</target>
-
<source>Cannot write file %x.</source>
<target>Impossible d'écrire le fichier %x.</target>
@@ -267,6 +267,12 @@ Attendu : %x octets
Trouvé : %y octets
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Impossible d'écrire les permissions de %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Opération non prise en charge pour dee dossiers de base de types différents.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Impossible de copier le lien symbolique %x vers %y.</target>
@@ -276,35 +282,29 @@ Trouvé : %y octets
<source>Unable to connect to %x.</source>
<target>Impossible de se connecter à %x.</target>
+<source>Failed to get information about server %x.</source>
+<target></target>
+
<source>Cannot open directory %x.</source>
<target>Impossible d'ouvrir le répertoire %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Impossible de parcourir le répertoire %x.</target>
-
-<source>Cannot read file attributes of %x.</source>
-<target>Impossible de lire les attributs du fichier %x.</target>
-
-<source>Cannot find %x.</source>
-<target>Impossible de trouver %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Impossible d'ouvrir le fichier %x.</target>
+<source>Cannot read directory %x.</source>
+<target></target>
<source>Cannot read file %x.</source>
<target>Impossible de lire le fichier %x.</target>
-<source>Cannot find device %x.</source>
-<target>Impossible de trouver le périphérique %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Impossible de créer le répertoire %x.</target>
+<source>Cannot delete file %x.</source>
+<target>Impossible de supprimer le fichier %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>Impossible de supprimer le répertoire %x.</target>
-<source>Cannot delete file %x.</source>
-<target>Impossible de supprimer le fichier %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Impossible de lire les attributs du fichier %x.</target>
<source>Cannot write modification time of %x.</source>
<target>Impossible d'écrire la date de modification de %x.</target>
@@ -315,15 +315,60 @@ Trouvé : %y octets
<source>Cannot resolve symbolic link %x.</source>
<target>Impossible de résoudre le lien symbolique %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Impossible de calculer l'espace disque libre de %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Impossible de déplacer %x dans la Corbeille.</target>
+<source>Cannot open file %x.</source>
+<target>Impossible d'ouvrir le fichier %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Impossible de trouver le périphérique %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Impossible de trouver %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Le type de l'élément %x n'est pas accepté :</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target></target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Impossible de calculer l'espace disque libre de %x.</target>
+
<source>Incorrect command line:</source>
<target>Ligne de commande incorrecte :</target>
+<source>Error Code %x</source>
+<target></target>
+
+<source>The server does not support authentication via %x.</source>
+<target></target>
+
+<source>Required:</source>
+<target>Requis :</target>
+
+<source>Unable to access %x.</source>
+<target></target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target></target>
+
+<source>Active connections: %x</source>
+<target></target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target></target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -354,11 +399,17 @@ Trouvé : %y octets
<source>Database file %x does not yet exist.</source>
<target>La base de données %x n'existe plus.</target>
-<source>Database file is corrupt:</source>
-<target>Le fichier Base de données est endommagé :</target>
+<source>Database file is corrupted:</source>
+<target></target>
-<source>Database files do not share a common session.</source>
-<target>Les fichiers de la base de données ne font pas partie de la même session.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target></target>
+
+<source>Loading file %x...</source>
+<target></target>
+
+<source>Saving file %x...</source>
+<target>Enregistrement du fichier %x...</target>
<source>Searching for folder %x...</source>
<target>Recherche du dossier %x...</target>
@@ -387,9 +438,6 @@ Trouvé : %y octets
<source>Detecting abandoned lock...</source>
<target>Détection de verrouillage abandonné ...</target>
-<source>Saving file %x...</source>
-<target>Enregistrement du fichier %x...</target>
-
<source>Items processed:</source>
<target>Élements traités :</target>
@@ -644,14 +692,23 @@ La commande est déclenchée si :
<source>Not enough free disk space available in:</source>
<target>Espace disque insuffisant sur :</target>
-<source>Required:</source>
-<target>Requis :</target>
-
<source>Available:</source>
<target>Disponible :</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Plusieurs dossiers multiples écrivent dans un sous-dossier commun. Veuillez vérifier votre configuration.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target></target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target></target>
+
+<source>Versioning folder:</source>
+<target></target>
+
+<source>Base folder:</source>
+<target></target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target></target>
<source>Synchronizing folder pair:</source>
<target>Synchronisation de la paire de dossiers :</target>
@@ -659,6 +716,9 @@ La commande est déclenchée si :
<source>Generating database...</source>
<target>Génération de la base de données...</target>
+<source>Loading...</source>
+<target>Chargement ...</target>
+
<source>job name</source>
<target>nom du job</target>
@@ -782,15 +842,6 @@ La commande est déclenchée si :
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Veuillez choisir un dossier local, en réseau ou un périphérique MTP.</target>
-<source>SFTP folder</source>
-<target>Dossier SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Sélectionner un dossier SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Sélectionner un autre type de dossier</target>
-
<source>&New</source>
<target>&Nouveau</target>
@@ -836,11 +887,8 @@ La commande est déclenchée si :
<source>&Tools</source>
<target>Ou&tils</target>
-<source>&Check for new version</source>
-<target>&Vérifier les nouvelles versions</target>
-
-<source>&Check now</source>
-<target>&Contrôler maintenant</target>
+<source>&Check for updates now</source>
+<target></target>
<source>Check &automatically once a week</source>
<target>Contrôler &automatiquement une fois par semaine</target>
@@ -860,6 +908,9 @@ La commande est déclenchée si :
<source>Remove folder pair</source>
<target>Supprimer le couple de dossiers</target>
+<source>Access online storage</source>
+<target></target>
+
<source>Swap sides</source>
<target>Permuter les côtés</target>
@@ -947,9 +998,6 @@ La commande est déclenchée si :
<source>Include:</source>
<target>Inclure :</target>
-<source>Exclude:</source>
-<target>Exclure :</target>
-
<source>Show examples</source>
<target>Afficher les exemples</target>
@@ -1033,8 +1081,11 @@ La commande est déclenchée si :
<source>Arrange folder pair</source>
<target>Coordonne la paire de dossiers</target>
-<source>Enter your SFTP login details:</source>
-<target>Entrer vos identifiants SFTP :</target>
+<source>Enter your login details:</source>
+<target></target>
+
+<source>Connection type:</source>
+<target></target>
<source>Server name or IP address:</source>
<target>Nom du serveur ou adresse IP :</target>
@@ -1042,11 +1093,29 @@ La commande est déclenchée si :
<source>Port:</source>
<target>Port :</target>
+<source>Encryption:</source>
+<target></target>
+
+<source>&Disabled</source>
+<target></target>
+
+<source>&Explicit SSL/TLS</source>
+<target></target>
+
+<source>Authentication:</source>
+<target></target>
+
+<source>&Password</source>
+<target></target>
+
+<source>&Key file</source>
+<target></target>
+
<source>User name:</source>
<target>Nom de l'utilisateur :</target>
-<source>Password:</source>
-<target>Mot de passe :</target>
+<source>Private key file:</source>
+<target></target>
<source>&Show password</source>
<target>&Affiche le mot de passe</target>
@@ -1054,6 +1123,27 @@ La commande est déclenchée si :
<source>Directory on server:</source>
<target>Répertoire sur le serveur :</target>
+<source>Performance improvements:</source>
+<target></target>
+
+<source>How to get best performance?</source>
+<target></target>
+
+<source>SSH connections for directory reading:</source>
+<target></target>
+
+<source>Suggested range: [1 - 10]</source>
+<target></target>
+
+<source>SFTP channels per connection:</source>
+<target></target>
+
+<source>Detect server limit</source>
+<target></target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target></target>
+
<source>Select a directory on the server:</source>
<target>Sélectionner un répertoire sur le serveur :</target>
@@ -1183,6 +1273,9 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Source code written in C++ using:</source>
<target>Code source écrit en C++ utilisant :</target>
+<source>Donation details</source>
+<target></target>
+
<source>If you like FreeFileSync:</source>
<target>Si vous aimez FreeFileSync:</target>
@@ -1192,8 +1285,8 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Feedback and suggestions are welcome</source>
<target>Vos commentaires et vos suggestions sont les bienvenus</target>
-<source>Homepage</source>
-<target>Accueil</target>
+<source>Home page</source>
+<target></target>
<source>Email</source>
<target>Email</target>
@@ -1204,8 +1297,26 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Many thanks for localization:</source>
<target>Un grand merci pour la traduction à :</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target></target>
+
+<source>1. Activate via internet now:</source>
+<target></target>
+
+<source>Activate online</source>
+<target></target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target></target>
+
+<source>&Copy to clipboard</source>
+<target></target>
+
+<source>Enter activation key:</source>
+<target></target>
+
+<source>Activate offline</source>
+<target></target>
<source>Save as Batch Job</source>
<target>Sauvegarder comme Job Batch</target>
@@ -1222,6 +1333,9 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Select Time Span</source>
<target>Sélection de l'Intervalle de Temps</target>
+<source>FreeFileSync Donation Edition</source>
+<target></target>
+
<source>&Options</source>
<target>&Options</target>
@@ -1243,8 +1357,8 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Overview</source>
<target>Aperçu</target>
-<source>&Download</source>
-<target>&Télécharger</target>
+<source>&Show details</source>
+<target></target>
<source>A new version of FreeFileSync is available:</source>
<target>Une nouvelle version de FreeFileSync est disponible :</target>
@@ -1483,8 +1597,17 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Chargement ...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target></target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target></target>
+
+<source>Password:</source>
+<target>Mot de passe :</target>
+
+<source>Key password:</source>
+<target></target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1543,6 +1666,9 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>&Show</source>
<target>&Afficher</target>
+<source>Downloading update...</source>
+<target></target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Reconnaître les fichiers identiques à l'aide de leur taille et de leur date.</target>
@@ -1636,12 +1762,33 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Percentage</source>
<target>Pourcentage</target>
+<source>Failed to retrieve update information.</source>
+<target></target>
+
+<source>Automatic updates:</source>
+<target></target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target></target>
+
<source>Check for Program Updates</source>
<target>Recherche des Mises à Jour</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target></target>
+
+<source>&Auto-update</source>
+<target></target>
+
+<source>&Home page</source>
+<target></target>
+
<source>Download now?</source>
<target>Télécharger maintenant ?</target>
+<source>&Download</source>
+<target>&Télécharger</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync est à jour.</target>
@@ -1654,14 +1801,20 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Consistency check failed for %x.</source>
<target>Contrôle de cohérence incorrect pour %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Impossible de trouver la fonction système %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target></target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target></target>
+
+<source>Incorrect activation key.</source>
+<target></target>
<source>Unable to register to receive system messages.</source>
<target>Impossible d'enregistrer la réception des messages système.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Les fichiers d'installation sont abîmés. Veuillez réinstaller FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Impossible de trouver la fonction système %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Impossible d'enregistrer les notifications de périphérique pour %x.</target>
@@ -1693,9 +1846,6 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Cannot copy attributes from %x to %y.</source>
<target>Impossible de copier les attributs de %x à %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Le type de l'élément %x n'est pas accepté :</target>
-
<source>%x TB</source>
<target>%x To</target>
@@ -1738,9 +1888,6 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Cannot change process I/O priorities.</source>
<target>Impossible de modifier les priorités E/S des tâches.</target>
-<source>Error Code %x:</source>
-<target>Code erreur %x :</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Echec de la vérification de la corbeille pour le dossier %x.</target>
@@ -1750,9 +1897,6 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Le fichier de configuration %x est incomplet. Les éléments manquants sont fixés à leur valeur par défaut.</target>
-<source>Internet access failed.</source>
-<target>Echec de l'accès Internet.</target>
-
<source>Prepare installation</source>
<target>Préparation de l'installation</target>
@@ -1822,18 +1966,12 @@ Cela garantit la cohérence du système de fichiers en cas d'erreur grave.
<source>Edit with FreeFileSync</source>
<target>Modification avec FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Merci pour votre don et votre aide !</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ce programme d'installation FreeFileSync pour les donateurs a atteint sa limite d'installation quotidienne.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Voulez-vous télécharger la version standard sur le site de FreeFileSync maintenant ?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>La version portable ne peut être installée dans le dossier choisi.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Veuillez choisir le type d'installation locale ou sélectionner un autre dossier pour cette installation.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target></target>
+
diff --git a/FreeFileSync/Build/Languages/german.lng b/FreeFileSync/Build/Languages/german.lng
index b4d41217..14a89170 100755
--- a/FreeFileSync/Build/Languages/german.lng
+++ b/FreeFileSync/Build/Languages/german.lng
@@ -7,12 +7,6 @@
<plural_definition>n == 1 ? 0 : 1</plural_definition>
</header>
-<source>Loading file %x...</source>
-<target>Lade Datei %x...</target>
-
-<source>Failed to get server information for %x.</source>
-<target></target>
-
<source>Both sides have changed since last synchronization.</source>
<target>Beide Seiten wurden seit der letzten Synchronisation verändert.</target>
@@ -121,15 +115,6 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Wird dieser Fehler ignoriert, werden die Ordner als leer angesehen. Fehlende Ordner werden bei Bedarf automatisch erstellt.</target>
-<source>A folder input field is empty.</source>
-<target>Ein Ordnereingabefeld ist leer.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Der entsprechende Ordner wird als leer angesehen.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Die folgenden Ordnerpfade sind voneinander abhängig:</target>
-
<source>File %x has an invalid date.</source>
<target>Die Datei %x hat ein ungültiges Datum.</target>
@@ -193,6 +178,21 @@
<source>Starting comparison</source>
<target>Starte Vergleich</target>
+<source>A folder input field is empty.</source>
+<target>Ein Ordnereingabefeld ist leer.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Der entsprechende Ordner wird als leer angesehen.</target>
+
+<source>Exclude:</source>
+<target>Ausschließen:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Ein Basisordner eines Ordnerpaares ist im anderen enthalben.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Der Ordner sollte von der Synchronisation über den Filter ausgeschlossen werden.</target>
+
<source>Calculating sync directions...</source>
<target>Berechne Synchronisationsrichtungen...</target>
@@ -282,6 +282,9 @@ Tatsächlich: %y bytes
<source>Unable to connect to %x.</source>
<target>Es kann keine Verbindung zu %x aufgebaut werden.</target>
+<source>Failed to get information about server %x.</source>
+<target>Informationen über den Server %x konnten nicht abgerufen werden.</target>
+
<source>Cannot open directory %x.</source>
<target>Das Verzeichnis %x kann nicht geöffnet werden.</target>
@@ -291,6 +294,9 @@ Tatsächlich: %y bytes
<source>Cannot read file %x.</source>
<target>Die Datei %x kann nicht gelesen werden.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Die Dateiattribute von %x können nicht gelesen werden.</target>
+
<source>Cannot create directory %x.</source>
<target>Das Verzeichnis %x kann nicht erstellt werden.</target>
@@ -300,8 +306,17 @@ Tatsächlich: %y bytes
<source>Cannot delete directory %x.</source>
<target>Das Verzeichnis %x kann nicht gelöscht werden.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Die Dateiattribute von %x können nicht gelesen werden.</target>
+<source>Cannot write modification time of %x.</source>
+<target>Die Änderungszeit von %x kann nicht geschrieben werden.</target>
+
+<source>Cannot determine final path for %x.</source>
+<target>Der endgültige Pfad für %x kann nicht ermittelt werden.</target>
+
+<source>Cannot resolve symbolic link %x.</source>
+<target>Die symbolische Verknüpfung %x kann nicht aufgelöst werden.</target>
+
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x kann nicht in den Papierkorb verschoben werden.</target>
<source>Cannot open file %x.</source>
<target>Die Datei %x kann nicht geöffnet werden.</target>
@@ -318,24 +333,15 @@ Tatsächlich: %y bytes
<source>Cannot delete symbolic link %x.</source>
<target>Die symbolischen Verknüpfung %x kann nicht gelöscht werden.</target>
-<source>Cannot write modification time of %x.</source>
-<target>Die Änderungszeit von %x kann nicht geschrieben werden.</target>
-
-<source>Cannot determine final path for %x.</source>
-<target>Der endgültige Pfad für %x kann nicht ermittelt werden.</target>
-
-<source>Cannot resolve symbolic link %x.</source>
-<target>Die symbolische Verknüpfung %x kann nicht aufgelöst werden.</target>
-
<source>Cannot determine free disk space for %x.</source>
<target>Der freie Speicherplatz für %x konnte nicht ermittelt werden.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x kann nicht in den Papierkorb verschoben werden.</target>
-
<source>Incorrect command line:</source>
<target>Ungültige Befehlszeile:</target>
+<source>Error Code %x</source>
+<target>Fehlercode %x</target>
+
<source>The server does not support authentication via %x.</source>
<target>Der Server unterstützt keine Authentifizierung über %x.</target>
@@ -402,9 +408,12 @@ Tatsächlich: %y bytes
<source>Database file is corrupted:</source>
<target>Die Datenbankdatei ist beschädigt:</target>
-<source>Database files do not yet contain information about the last synchronisation.</source>
+<source>The database files do not yet contain information about the last synchronization.</source>
<target>Die Datenbankdateien beinhalten noch keine Informationen zur letzten Synchronisation.</target>
+<source>Loading file %x...</source>
+<target>Lade Datei %x...</target>
+
<source>Saving file %x...</source>
<target>Speichere Datei %x...</target>
@@ -692,8 +701,20 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Available:</source>
<target>Verfügbar:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Mehrere Ordnerpaare schreiben in einen gemeinsamen Unterordner. Bitte überprüfen Sie ihre Konfiguration.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Einige Dateien werden als Teil mehrerer Basisordner synchronisiert werden.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Um Konflikte zu vermeiden sollten Ausschlussfilter erstellt werden, so dass jede aktualisierte Datei nur von einem Basisordner berücksichtigt wird.</target>
+
+<source>Versioning folder:</source>
+<target>Versionierungsordner:</target>
+
+<source>Base folder:</source>
+<target>Basisordner:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Der Versionierungsordner wird synchronisiert werden, weil er in einem Basisordner enthalten ist.</target>
<source>Synchronizing folder pair:</source>
<target>Synchronisiere Ordnerpaar:</target>
@@ -701,6 +722,9 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Generating database...</source>
<target>Erzeuge Synchronisationsdatenbank...</target>
+<source>Loading...</source>
+<target>Lade...</target>
+
<source>job name</source>
<target>Auftragsname</target>
@@ -824,15 +848,6 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Bitte wählen Sie einen Ordner auf einem lokalen Dateisystem, Netzwerk oder MTP Gerät.</target>
-<source>SFTP folder</source>
-<target>SFTP-Ordner</target>
-
-<source>Select SFTP folder</source>
-<target>SFTP-Ordner auswählen</target>
-
-<source>Select alternative folder type</source>
-<target>Alternativen Ordnertyp auswählen</target>
-
<source>&New</source>
<target>&Neu</target>
@@ -899,6 +914,9 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Remove folder pair</source>
<target>Ordnerpaar entfernen</target>
+<source>Access online storage</source>
+<target>Auf Onlinespeicher zugreifen</target>
+
<source>Swap sides</source>
<target>Seiten vertauschen</target>
@@ -986,9 +1004,6 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Include:</source>
<target>Einschließen:</target>
-<source>Exclude:</source>
-<target>Ausschließen:</target>
-
<source>Show examples</source>
<target>Beispiele zeigen</target>
@@ -1072,8 +1087,11 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Arrange folder pair</source>
<target>Ordnerpaar anordnen</target>
-<source>Enter your SFTP login details:</source>
-<target>SFTP Anmeldedaten eingeben:</target>
+<source>Enter your login details:</source>
+<target>Anmeldedaten eingeben:</target>
+
+<source>Connection type:</source>
+<target>Verbindungstyp:</target>
<source>Server name or IP address:</source>
<target>Servername oder IP-Adresse:</target>
@@ -1081,6 +1099,15 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Verschlüsselung:</target>
+
+<source>&Disabled</source>
+<target>&Deaktiviert</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explizites SSL/TLS</target>
+
<source>Authentication:</source>
<target>Authentifizierung:</target>
@@ -1297,9 +1324,6 @@ Dadurch wird ein konsistenter Datenstand auch bei schweren Fehlern garantiert.
<source>Activate offline</source>
<target>Offline aktivieren</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
-
<source>Save as Batch Job</source>
<target>Als Batchauftrag speichern</target>
@@ -1579,9 +1603,6 @@ Dadurch wird ein konsistenter Datenstand auch bei schweren Fehlern garantiert.
<source>Log</source>
<target>Protokoll</target>
-<source>Loading...</source>
-<target>Lade...</target>
-
<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
<target>Die Installationsdateien sind beschädigt. Bitte installieren Sie FreeFileSync neu.</target>
@@ -1873,9 +1894,6 @@ Dadurch wird ein konsistenter Datenstand auch bei schweren Fehlern garantiert.
<source>Cannot change process I/O priorities.</source>
<target>Die Eingabe/Ausgabe Prioritäten für den Prozess können nicht geändert werden.</target>
-<source>Error Code %x</source>
-<target>Fehlercode %x</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Die Prüfung des Papierkorbs für Ordner %x ist fehlgeschlagen.</target>
diff --git a/FreeFileSync/Build/Languages/greek.lng b/FreeFileSync/Build/Languages/greek.lng
index 761cfb87..f98646cc 100755
--- a/FreeFileSync/Build/Languages/greek.lng
+++ b/FreeFileSync/Build/Languages/greek.lng
@@ -22,14 +22,14 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Ρύθμιση προεπιλεγμένης κατεύθυνσης συγχρονισμού: Τα νεότερα αρχεία θα αντικαταστήσουν τα παλιότερα.</target>
-<source>Creating folder %x</source>
-<target>Δημιουργία του φακέλου %x</target>
-
<source>Creating file %x</source>
<target>Δημιουργία του αρχείου %x</target>
+<source>Creating folder %x</source>
+<target>Δημιουργία του φακέλου %x</target>
+
<source>Creating symbolic link %x</source>
-<target>Δημιουργία της συμβολικής σύνδεσης %x</target>
+<target>Δημιουργία των συμβολικών συνδέσμων %x</target>
<source>Moving file %x to the recycle bin</source>
<target>Μεταφορά του αρχείου %x στον κάδο ανακύκλωσης</target>
@@ -38,7 +38,7 @@
<target>Μεταφορά του φακέλου %x στον κάδο ανακύκλωσης</target>
<source>Moving symbolic link %x to the recycle bin</source>
-<target>Μεταφορά της συμβολικής σύνδεσης %x στον κάδο ανακύκλωσης</target>
+<target>Μεταφορά του συμβολικού συνδέσμου %x στον κάδο ανακύκλωσης</target>
<source>Deleting file %x</source>
<target>Διαγραφή του αρχείου %x</target>
@@ -115,35 +115,26 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Εάν αγνοηθεί αυτό το σφάλμα, οι φάκελοι θα θεωρηθούν κενοί. Φάκελοι που λείπουν θα δημιουργηθούν αυτόματα, όταν χρειαστούν.</target>
-<source>A folder input field is empty.</source>
-<target>Ένα πεδίο εισαγωγής φακέλων είναι άδειο.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Ο αντίστοιχος φάκελος θα θεωρηθεί κενός.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Οι ακόλουθες διαδρομές εξαρτώνται η μια από την άλλη:</target>
-
<source>File %x has an invalid date.</source>
<target>Το αρχείο %x δεν έχει έγκυρη ημερομηνία.</target>
<source>Date:</source>
<target>Ημερομηνία:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Τα αρχεία %x έχουν την ίδια ημερομηνία αλλά διαφορετικό μέγεθος.</target>
+<source>Files have the same date but a different size.</source>
+<target>Τα αρχεία έχουν την ίδια ημερομηνία αλλά διαφορετικό μέγεθος.</target>
<source>Size:</source>
<target>Μέγεθος:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Η σύγκριση περιεχομένου παραλήφθηκε για τα εξαιρούμενα αρχεία %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Η σύγκριση των περιεχομένων έχει παραληφθεί για τα εξαιρεθέντα αρχεία.</target>
<source>Items differ in attributes only</source>
<target>Τα στοιχεία διαφέρουν μόνο ως προς τα χαρακτηριστικά τους</target>
<source>Resolving symbolic link %x</source>
-<target>Επίλυση της συμβολικής σύνδεσης %x</target>
+<target>Επίλυση του συμβολικού συνδέσμου %x</target>
<source>Comparing content of files %x</source>
<target>Σύγκριση του περιεχομένου των αρχείων %x</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Έναρξη της σύγκρισης</target>
+<source>A folder input field is empty.</source>
+<target>Ένα πεδίο εισαγωγής φακέλων είναι άδειο.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Ο αντίστοιχος φάκελος θα θεωρηθεί κενός.</target>
+
+<source>Exclude:</source>
+<target>Εξαίρεση:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Ο ένας βασικός φάκελος ενός ζεύγους φακέλων βρίσκεται μέσα στον άλλον.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Ο φάκελος θα έπρεπε να εξαιρεθεί από το συγχρονισμό μέσω φίλτρου.</target>
+
<source>Calculating sync directions...</source>
<target>Υπολογισμός των κατευθύνσεων συγχρονισμού...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Ενημέρωση των χαρακτηριστικών στα δεξιά</target>
-<source>Cannot write permissions of %x.</source>
-<target>Δεν μπορεί να γίνει εγγραφή των δικαιωμάτων πρόσβασης του %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Η λειτουργία δεν υποστηρίζεται για διαφορετικούς τύπους βασικών υποκαταλόγων.</target>
-
<source>Cannot write file %x.</source>
<target>Δεν μπορεί να γίνει εγγραφή του αρχείου %x.</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
Βρέθηκε: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Δεν μπορεί να γίνει εγγραφή των δικαιωμάτων πρόσβασης του %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Η λειτουργία δεν υποστηρίζεται για διαφορετικούς τύπους βασικών φακέλων.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
-<target>Αδυναμία αντιγραφής της συμβολικής σύνδεσης %x στο %y.</target>
+<target>Αδυναμία αντιγραφής του συμβολικού συνδέσμου %x στο %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Δεν μπορεί το αρχείο %x να μεταφερθεί στο %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Δεν είναι δυνατή η απαρίθμηση του υποκαταλόγου %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Δεν μπορεί να πραγματοποιηθεί σύνδεση με το %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Δεν μπορεί να γίνει ανάγνωση των χαρακτηριστικών του αρχείου %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Αποτυχία λήψης πληροφοριών από τον διακομιστή %x.</target>
-<source>Cannot find %x.</source>
-<target>Το %x δεν μπορεί να βρεθεί.</target>
+<source>Cannot open directory %x.</source>
+<target>Δεν είναι δυνατό το άνοιγμα του υποκαταλόγου %x.</target>
-<source>Cannot open file %x.</source>
-<target>Δεν είναι δυνατό το άνοιγμα του αρχείου %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Δεν μπορεί να γίνει ανάγνωση του καταλόγου %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Δεν μπορεί να γίνει ανάγνωση των χαρακτηριστικών του αρχείου %x.</target>
<source>Cannot read file %x.</source>
<target>Δεν μπορεί να γίνει ανάγνωση του αρχείου %x.</target>
-<source>Cannot find device %x.</source>
-<target>Η συσκευή %x δεν μπορεί να βρεθεί.</target>
-
<source>Cannot create directory %x.</source>
<target>Δεν μπορεί να δημιουργηθεί ο υποκατάλογος %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Δεν μπορεί να διαγραφεί ο υποκατάλογος %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Δεν μπορεί να διαγραφεί το αρχείο %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Δεν μπορεί να διαγραφεί ο υποκατάλογος %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Δεν μπορεί να γίνει εγγραφή της ώρας τροποποίησης του %x.</target>
@@ -307,25 +313,67 @@ Actual: %y bytes
<target>Δεν μπορεί να προσδιοριστεί η τελική διαδρομή για το %x.</target>
<source>Cannot resolve symbolic link %x.</source>
-<target>Η συμβολική σύνδεση %x δεν μπορεί να επιλυθεί.</target>
+<target>Ο συμβολικός σύνδεσμος %x δεν μπορεί να επιλυθεί.</target>
-<source>Cannot open directory %x.</source>
-<target>Δεν είναι δυνατό το άνοιγμα του υποκαταλόγου %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Δεν ήταν δυνατή η μεταφορά του %x στον κάδο ανακύκλωσης.</target>
+
+<source>Cannot open file %x.</source>
+<target>Δεν είναι δυνατό το άνοιγμα του αρχείου %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Η συσκευή %x δεν μπορεί να βρεθεί.</target>
+
+<source>Cannot find %x.</source>
+<target>Το %x δεν μπορεί να βρεθεί.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Ο τύπος του στοιχείου %x δεν υποστηρίζεται:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Δεν μπορεί να διαγραφεί ο συμβολικός σύνδεσμος %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Δεν μπορεί να υπολογιστεί ο ελεύθερος χώρος του δίσκου %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Δεν ήταν δυνατή η μεταφορά του %x στον κάδο ανακύκλωσης.</target>
-
<source>Incorrect command line:</source>
<target>Εσφαλμένη γραμμή εντολών:</target>
-<source>Error Code %x:</source>
-<target>Κωδικός Σφάλματος %x:</target>
+<source>Error Code %x</source>
+<target>Κωδικός Σφάλματος %x</target>
-<source>Unable to connect to %x.</source>
-<target>Δεν μπορεί να πραγματοποιηθεί σύνδεση με το %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Ο εξυπηρετητής δεν υποστηρίζει πιστοποίηση μέσω %x.</target>
+
+<source>Required:</source>
+<target>Απαιτείται:</target>
+
+<source>Unable to access %x.</source>
+<target>Δεν είναι δυνατή η πρόσβαση στο %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Το χρονικό όριο της λειτουργίας έληξε μετά από 1 δευτερόλεπτο.</pluralform>
+<pluralform>Το χρονικό όριο της λειτουργίας έληξε μετά από %x δευτερόλεπτα.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Δεν είναι δυνατή η αναμονή περισσότερων από 1 σύνδεσης τη φορά.</pluralform>
+<pluralform>Δεν είναι δυνατή η αναμονή περισσότερων από %x συνδέσεων τη φορά.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Ενεργές συνδέσεις: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Αποτυχία ανοίγματος του SFTP καναλιού με αριθμό %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Το αρχείο βάσης δεδομένων %x δεν έχει ακόμα δημιουργηθεί.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Το αρχείο βάσης δεδομένων είναι κατεστραμμένο:</target>
-<source>Database files do not share a common session.</source>
-<target>Τα αρχεία βάσης δεδομένων δεν έχουν χρησιμοποιηθεί στον ίδιο συγχρονισμό.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Τα αρχεία βάσης δεδομένων δεν περιέχουν ακόμα πληροφορίες για τον τελευταίο συγχρονισμό.</target>
+
+<source>Loading file %x...</source>
+<target>Λήψη του αρχείου %x...</target>
+
+<source>Saving file %x...</source>
+<target>Αποθήκευση του αρχείου %x...</target>
<source>Searching for folder %x...</source>
<target>Αναζήτηση του φακέλου %x...</target>
@@ -390,9 +444,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Ανίχνευση κλειδώματος που εγκαταλείφθηκε...</target>
-<source>Saving file %x...</source>
-<target>Αποθήκευση του αρχείου %x...</target>
-
<source>Items processed:</source>
<target>Επεξεργάστηκαν στοιχεία:</target>
@@ -526,7 +577,7 @@ The command is triggered if:
</source>
<target>
Αυτή η εντολή πραγματοποιείται εάν:
--αρχεία ή φάκελοι αλλάξουν
+-αρχεία ή υποφάκελοι αλλάξουν
-παρουσιαστούν νέοι φάκελοι (π.χ. εισαχθεί ένα φλασάκι USB)
</target>
@@ -597,7 +648,7 @@ The command is triggered if:
<target>Μεταφορά του φακέλου %x στο %y</target>
<source>Moving symbolic link %x to %y</source>
-<target>Μεταφορά της συμβολικής σύνδεσης %x στο %y</target>
+<target>Μεταφορά του συμβολικού σύνδεσμου %x στο %y</target>
<source>Removing old versions...</source>
<target>Διαγραφή παλιών εκδόσεων...</target>
@@ -606,7 +657,7 @@ The command is triggered if:
<target>Ενημέρωση του αρχείου %x</target>
<source>Updating symbolic link %x</source>
-<target>Ενημέρωση της συμβολικής σύνδεσης %x</target>
+<target>Ενημέρωση του συμβολικού σύνδεσμου %x</target>
<source>Verifying file %x</source>
<target>Επαλήθευση του αρχείου %x</target>
@@ -647,14 +698,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Δεν υπάρχει αρκετός διαθέσιμος χώρος στο δίσκο:</target>
-<source>Required:</source>
-<target>Απαιτείται:</target>
-
<source>Available:</source>
<target>Διαθέσιμος:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Πολλά ζεύγη φάκελων γράφουν σε έναν κοινό υποκατάλογο. Παρακαλούμε ελέγξτε ξανά τη διάταξη που επιλέξατε.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Μερικά αρχεία θα συγχρονιστούν ως μέρη πολλαπλών βασικών φακέλων.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Για να αποφύγετε διενέξεις, δημιουργείστε φίλτρα εξαίρεσης, ώστε κάθε ενημερωμένο αρχείο να εξετάζεται μόνο από έναν βασικό φάκελο.</target>
+
+<source>Versioning folder:</source>
+<target>Διατήρηση παλιών εκδόσεων του φακέλου:</target>
+
+<source>Base folder:</source>
+<target>Βασικός φάκελος:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Ο φάκελος διατήρησης παλιών εκδόσεων θα συγχρονιστεί γιατί βρίσκεται μέσα σε έναν βασικό φάκελο.</target>
<source>Synchronizing folder pair:</source>
<target>Συγχρονίζεται το ζευγάρι φακέλων:</target>
@@ -662,6 +722,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Δημιουργία βάσης δεδομένων...</target>
+<source>Loading...</source>
+<target>Φόρτωση...</target>
+
<source>job name</source>
<target>όνομα ενέργειας</target>
@@ -726,7 +789,7 @@ The command is triggered if:
<target>Φάκελος</target>
<source>Symlink</source>
-<target>Συμβολική σύνδεση</target>
+<target>Συμβολικός σύνδεσμος</target>
<source>Full path</source>
<target>Πλήρης διαδρομή</target>
@@ -785,15 +848,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Παρακαλούμε επιλέξτε ένα φάκελο σε ένα τοπικό σύστημα αρχείων, σε ένα δίκτυο ή σε μια συσκευή MTP.</target>
-<source>SFTP folder</source>
-<target>Φάκελος SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Επιλογή φακέλου SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Επιλογή εναλλακτικού τύπου φακέλου</target>
-
<source>&New</source>
<target>&Δημιουργία</target>
@@ -839,11 +893,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&Εργαλεία</target>
-<source>&Check for new version</source>
-<target>Έλεγχος για &νέα έκδοση</target>
-
-<source>&Check now</source>
-<target>Έλεγχος &τώρα</target>
+<source>&Check for updates now</source>
+<target>Έλεγχος για ενημερώσεις &τώρα</target>
<source>Check &automatically once a week</source>
<target>&Aυτόματος έλεγχος μια φορά την εβδομάδα</target>
@@ -863,6 +914,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>Διαγραφή του ζεύγους φακέλων</target>
+<source>Access online storage</source>
+<target>Πρόσβαση σε online χώρο αποθήκευσης</target>
+
<source>Swap sides</source>
<target>Ανταλλαγή πλευρών</target>
@@ -921,7 +975,7 @@ The command is triggered if:
<target>Επιλογή μεθόδου:</target>
<source>Include &symbolic links:</source>
-<target>Συμπερίληψη των &συμβολικών συνδέσεων:</target>
+<target>Συμπερίληψη των &συμβολικών συνδέσμων:</target>
<source>&Follow</source>
<target>Α&κολούθηση</target>
@@ -950,9 +1004,6 @@ The command is triggered if:
<source>Include:</source>
<target>Συμπερίληψη:</target>
-<source>Exclude:</source>
-<target>Αποκλεισμός:</target>
-
<source>Show examples</source>
<target>Εμφάνιση παραδειγμάτων</target>
@@ -969,7 +1020,7 @@ The command is triggered if:
<target>Μέγιστο:</target>
<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source>
-<target>Επιλογή κανόνων φιλτραρίσματος, ώστε να αποκλειστούν ορισμένα αρχεία από το συγχρονισμό. Εισάγετε τις διαδρομές των αρχείων σχετικά με το αντίστοιχο ζεύγος φακέλων.</target>
+<target>Επιλογή κανόνων φιλτραρίσματος, ώστε να εξαιρεθούν ορισμένα αρχεία από το συγχρονισμό. Εισάγετε τις διαδρομές των αρχείων σχετικά με το αντίστοιχο ζεύγος φακέλων.</target>
<source>C&lear</source>
<target>&Καθαρισμός</target>
@@ -1036,8 +1087,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Οργάνωση του ζεύγους φακέλων:</target>
-<source>Enter your SFTP login details:</source>
-<target>Εισάγετε τα στοιχεία σύνδεσης SFTP:</target>
+<source>Enter your login details:</source>
+<target>Εισάγετε τις λεπτομέρεις της σύνδεσης:</target>
+
+<source>Connection type:</source>
+<target>Τύπος σύνδεσης:</target>
<source>Server name or IP address:</source>
<target>Όνομα του διακομιστή ή διεύθυνση IP:</target>
@@ -1045,11 +1099,29 @@ The command is triggered if:
<source>Port:</source>
<target>Θύρα:</target>
+<source>Encryption:</source>
+<target>Κρυπτογράφηση:</target>
+
+<source>&Disabled</source>
+<target>&Απενεργοποίηση</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Ρητά SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Πιστοποίηση:</target>
+
+<source>&Password</source>
+<target>&Κωδικός πρόσβασης</target>
+
+<source>&Key file</source>
+<target>&Αρχείο κλειδιού</target>
+
<source>User name:</source>
<target>Όνομα χρήστη:</target>
-<source>Password:</source>
-<target>Συνθηματικό:</target>
+<source>Private key file:</source>
+<target>Ιδιωτικό αρχείο κλειδιού:</target>
<source>&Show password</source>
<target>&Εμφάνιση συνθηματικού</target>
@@ -1057,6 +1129,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>Υποκατάλογος στον διακομιστή:</target>
+<source>Performance improvements:</source>
+<target>Βελτιώσεις της απόδοσης:</target>
+
+<source>How to get best performance?</source>
+<target>Πώς να έχετε την καλύτερη απόδοση;</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH συνδέσεις για ανάγνωση του καταλόγου:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Προτεινόμενο εύρος: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Αριθμός καναλιών SFTP ανά σύνδεση:</target>
+
+<source>Detect server limit</source>
+<target>Ανίχνευση ορίου του εξυπηρετητή</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 συνδέσεις X 10 κανάλια = 20 φορές πιο γρήγορη ανάγνωση του καταλόγου</target>
+
<source>Select a directory on the server:</source>
<target>Επιλογή ενός υποκαταλόγου στον διακομιστή:</target>
@@ -1186,6 +1279,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Ο πηγαίος κώδικας γράφτηκε σε C++ χρησιμοποιώντας τα:</target>
+<source>Donation details</source>
+<target>Λεπτομέρειες δωρεάς</target>
+
<source>If you like FreeFileSync:</source>
<target>Αν σας αρέσει το FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Τα σχόλια και οι προτάσεις σας είναι ευπρόσδεκτα</target>
-<source>Homepage</source>
-<target>Ιστοσελίδα</target>
+<source>Home page</source>
+<target>Αρχική σελίδα</target>
<source>Email</source>
<target>Email</target>
@@ -1207,8 +1303,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Πολλές ευχαριστίες για τις μεταφράσεις:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Ενεργοποίηση της Έκδοσης Δωρητή του FreeFileSync μέσω μιας από τις παρακάτω μεθόδους:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Ενεργοποίηση μέσω internet τώρα:</target>
+
+<source>Activate online</source>
+<target>Απευθείας ενεργοποίηση</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Ανάκτηση ενός κλειδιού ενεργοποίησης χωρίς σύνδεση από το ακόλουθο URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Αντιγραφή στο πρόχειρο</target>
+
+<source>Enter activation key:</source>
+<target>Εισαγωγή κλειδιού ενεργοποίησης:</target>
+
+<source>Activate offline</source>
+<target>Ενεργοποίηση χωρίς σύνδεση</target>
<source>Save as Batch Job</source>
<target>Αποθήκευση ως Δέσμη Εργασιών</target>
@@ -1225,6 +1339,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Επιλογή Χρονικού Εύρους</target>
+<source>FreeFileSync Donation Edition</source>
+<target>Έκδοση Δωρητή του FreeFileSync</target>
+
<source>&Options</source>
<target>&Επιλογές</target>
@@ -1246,8 +1363,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Σύνοψη</target>
-<source>&Download</source>
-<target>&Λήψη</target>
+<source>&Show details</source>
+<target>&Προβολή λεπτομερειών</target>
<source>A new version of FreeFileSync is available:</source>
<target>Μια νέα έκδοση του FreeFileSync είναι διαθέσιμη:</target>
@@ -1486,8 +1603,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Καταγραφή</target>
-<source>Loading...</source>
-<target>Φόρτωση...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Τα αρχεία εγκατάστασης είναι κατεστραμμένα. Παρακαλούμε επανεγκαταστείστε το FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Σας ευχαριστούμε, %x, για τη δωρεά και την υποστήριξή σας!</target>
+
+<source>Password:</source>
+<target>Συνθηματικό:</target>
+
+<source>Key password:</source>
+<target>Συνθηματικό κλειδιού:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Εμφάνιση</target>
+<source>Downloading update...</source>
+<target>Λήψη ενημέρωσης...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Αναγνώριση των ταυτόσημων αρχείων με σύγκριση του χρόνου τροποποίησης και του μεγέθους.</target>
@@ -1639,12 +1768,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Ποσοστό</target>
+<source>Failed to retrieve update information.</source>
+<target>Αποτυχία ανάκτησης πληροφοριών ενημέρωσης.</target>
+
+<source>Automatic updates:</source>
+<target>Αυτόματες ενημερώσεις:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Απαιτεί την Έκδοση Δωρητή του FreeFileSync</target>
+
<source>Check for Program Updates</source>
<target>Έλεγχος για ενημερώσεις του προγράμματος</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Αυτόματη ενημέρωση τώρα ή χειροκίνητη λήψη από την ιστοσελίδα του FreeFileSync;</target>
+
+<source>&Auto-update</source>
+<target>&Αυτόματη ενημέρωση</target>
+
+<source>&Home page</source>
+<target>&Ιστοσελίδα</target>
+
<source>Download now?</source>
<target>Λήψη τώρα;</target>
+<source>&Download</source>
+<target>&Λήψη</target>
+
<source>FreeFileSync is up to date.</source>
<target>Το FreeFileSync είναι ενημερωμένο.</target>
@@ -1657,14 +1807,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Ο έλεγχος συνέπειας απέτυχε για το %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Δεν μπορεί να βρεθεί η λειτουργία συστήματος %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Η εγκατάσταση καταχωρήθηκε σε διαφορετικό λειτουργικό σύστημα.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Αποτυχία ενεργοποίησης της Έκδοσης Δωρητή του FreeFileSync.</target>
+
+<source>Incorrect activation key.</source>
+<target>Εσφαλμένο κλειδί ενεργοποίησης.</target>
<source>Unable to register to receive system messages.</source>
<target>Δεν μπορεί να καταχωρηθεί η λήψη μηνυμάτων συστήματος.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Τα αρχεία εγκατάστασης είναι κατεστραμμένα. Παρακαλούμε εγκαταστείστε ξανά το FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Δεν μπορεί να βρεθεί η λειτουργία συστήματος %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Δεν μπορούν να καταχωρηθεί η ειδοποίηση για τη συσκευή %x.</target>
@@ -1696,9 +1852,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Δεν μπορούν να αντιγραφούν τα χαρακτηριστικά του %x στο %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Ο τύπος του στοιχείου %x δεν υποστηρίζεται:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Το αρχείο διάταξης %x είναι ατελές. Τα στοιχεία που λείπουν θα αντικατασταθούν με τις προεπιλεγμένες τιμές τους.</target>
-<source>Internet access failed.</source>
-<target>Απέτυχε η πρόσβαση στο Internet.</target>
-
<source>Prepare installation</source>
<target>Προετοιμασία εγκατάστασης</target>
@@ -1822,18 +1972,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Επεξεργασία με FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Ευχαριστούμε για τη δωρεά και την υποστήριξή σας!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Αυτό το πρόγραμμα εγκατάστασης του FreeFileSync για δωρητές έφτασε στο ημερήσιο του όριο.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Θέλετε να κάνετε λήψη της κανονικής έκδοσης από την ιστοσελίδα του FreeFileSync τώρα;</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Η φορητή έκδοση δεν μπορεί να εγκατασταθεί στον επιλεγμένο φάκελο.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Παρακαλούμε επιλέξτε την τοπική εγκατάσταση ή επιλέξτε έναν διαφορετικό φάκελο για εγκατάσταση.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Η λειτουργία σιωπηρής εγκατάστασης είναι διαθέσιμη μόνο στην Έκδοση Δωρητή FreeFileSync.</target>
+
diff --git a/FreeFileSync/Build/Languages/hebrew.lng b/FreeFileSync/Build/Languages/hebrew.lng
index 48fc065d..f5e9ad7b 100755
--- a/FreeFileSync/Build/Languages/hebrew.lng
+++ b/FreeFileSync/Build/Languages/hebrew.lng
@@ -7,6 +7,12 @@
<plural_definition>n == 1 ? 0 : 1</plural_definition>
</header>
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
<source>Both sides have changed since last synchronization.</source>
<target>שני הצדדים שונו מאז הסנכרון האחרון.</target>
@@ -22,12 +28,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>בחר ברירת מחדל של סנכרון: קבצים ישנים ידרסו ע"י קבצים חדשים יותר.</target>
-<source>Creating folder %x</source>
-<target>יוצר תיקייה %x</target>
-
<source>Creating file %x</source>
<target>יוצר קובץ %x</target>
+<source>Creating folder %x</source>
+<target>יוצר תיקייה %x</target>
+
<source>Creating symbolic link %x</source>
<target>יוצר קישור סימבולי %x</target>
@@ -115,29 +121,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>אם תתעלם משגיאה זו התיקיות יחשבו כריקות. תיקיות חסרות נוצרות באופן אוטומטי כאשר נדרש.</target>
-<source>A folder input field is empty.</source>
-<target>שדה קלט תיקייה ריק.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>התקייה המתאימה תחשב כריקה.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>נתיבי התיקיות הבאים תלויים זה בזה:</target>
-
<source>File %x has an invalid date.</source>
<target>קובץ %x מכיל תאריך שגוי.</target>
<source>Date:</source>
<target>תאריך:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>קובץ %x בעל תאריך זהה אך גודל שונה.</target>
+<source>Files have the same date but a different size.</source>
+<target>לקבצים יש תאריך זהה אבל גודל שונה.</target>
<source>Size:</source>
<target>גודל:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>השוואת תוכן דולגה עבור קבצים שלא נכללו %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>השוואת תוכן לא בוצעה עבור קבצים שלא נכללו.</target>
<source>Items differ in attributes only</source>
<target>פריטים שונים בתכונות בלבד</target>
@@ -187,6 +184,21 @@
<source>Starting comparison</source>
<target>מתחיל השוואה</target>
+<source>A folder input field is empty.</source>
+<target>שדה קלט תיקייה ריק.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>התקייה המתאימה תחשב כריקה.</target>
+
+<source>Exclude:</source>
+<target>לא לכלול:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>תיקיית בסיס של צמד תיקיות מוכלת בתיקייה אחרת.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>יש להחריג את התיקייה מסנכרון באמצעות מסנן.</target>
+
<source>Calculating sync directions...</source>
<target>מחשב כיווני סנכרון...</target>
@@ -247,12 +259,6 @@
<source>Update attributes on right</source>
<target>עדכן תכונות בצד שמאל</target>
-<source>Cannot write permissions of %x.</source>
-<target>לא יכול לכתוב הרשאות של %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>פעולה לא נתמכת עבור סוגים אחרים של תיקית בסיס.</target>
-
<source>Cannot write file %x.</source>
<target>לא יכול לכתוב קובץ %x.</target>
@@ -267,39 +273,45 @@ Actual: %y bytes
בפועל: %y בתים
</target>
+<source>Cannot write permissions of %x.</source>
+<target>לא יכול לכתוב הרשאות של %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>פעולה לא נתמכת עבור סוגים אחרים של תיקית בסיס.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>לא יכול להעתיק קישור סימבולי %x אל %y.</target>
<source>Cannot move file %x to %y.</source>
<target>לא יכול להעביר קובץ %x אל %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>לא יכול למספר מחיצה %x.</target>
+<source>Unable to connect to %x.</source>
+<target>לא יכול להתחבר אל %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>לא יכול לקרוא תכונות של קובץ %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>נכשלה קבלת מידע על שרת %x.</target>
-<source>Cannot find %x.</source>
-<target>לא מוצא %x.</target>
+<source>Cannot open directory %x.</source>
+<target>לא יכול לפתוח מחיצה %x.</target>
-<source>Cannot open file %x.</source>
-<target>לא יכול לפתוח קובץ %x.</target>
+<source>Cannot read directory %x.</source>
+<target>לא ניתן לקרוא מחיצה %x.</target>
<source>Cannot read file %x.</source>
<target>לא יכול לקרוא קובץ %x.</target>
-<source>Cannot find device %x.</source>
-<target>לא מוצא התקן %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>לא יכול לקרוא תכונות של קובץ %x.</target>
<source>Cannot create directory %x.</source>
<target>לא יכול ליצור מחיצה %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>לא יכול למחוק מחיצה %x.</target>
-
<source>Cannot delete file %x.</source>
<target>לא יכול למחוק קובץ %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>לא יכול למחוק מחיצה %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>לא יכול לרשום זמן שינוי של %x.</target>
@@ -309,23 +321,56 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>לא יכול לפענח את הקישור הסימבולי %x.</target>
-<source>Cannot open directory %x.</source>
-<target>לא יכול לפתוח מחיצה %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>לא יכול להעביר את %x לסל המחזור.</target>
+
+<source>Cannot open file %x.</source>
+<target>לא יכול לפתוח קובץ %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>לא מוצא התקן %x.</target>
+
+<source>Cannot find %x.</source>
+<target>לא מוצא %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>סוג של פריט %x אינו נתמך:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>לא ניתן למחוק קישור סימבולי %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>לא ניתן לקבוע שטח דיסק פנוי עבור %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>לא יכול להעביר את %x לסל המחזור.</target>
-
<source>Incorrect command line:</source>
<target>שורת פקודה לא תקינה:</target>
-<source>Error Code %x:</source>
-<target>קוד שגיאה %x:</target>
+<source>Error Code %x</source>
+<target>קוד שגיאה %x</target>
-<source>Unable to connect to %x.</source>
-<target>לא יכול להתחבר אל %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>השרת אינו תומך באימות באמצעות %x.</target>
+
+<source>Required:</source>
+<target>נדרש:</target>
+
+<source>Unable to access %x.</source>
+<target>לא ניתן לגשת אל %x.</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>לא ניתן להמתין ליותר מחיבור 1 בכל פעם.</pluralform>
+<pluralform>לא ניתן להמתין ליותר מ %x חיבורים בכל פעם.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>חיבורים פעילים: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>נכשלה פתיחת ערוץ SFTP מספר %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +402,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>קובץ מסד נתונים %x אינו קיים עדיין.</target>
-<source>Database file is corrupt:</source>
-<target>קובץ מסד נתונים משובש:</target>
+<source>Database file is corrupted:</source>
+<target>קובץ בסיס נתונים פגום:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>קבצי בסיס הנתונים אינם כוללים עדיין מידע על סינכרון אחרון.</target>
-<source>Database files do not share a common session.</source>
-<target>קבצי הנתונים אינם כוללים מופע פעילות משותף.</target>
+<source>Loading file %x...</source>
+<target>טוען קובץ %x...</target>
+
+<source>Saving file %x...</source>
+<target>שומר קובץ %x...</target>
<source>Searching for folder %x...</source>
<target>מחפש את תיקייה %x...</target>
@@ -390,9 +441,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>מגלה נעילה נטושה...</target>
-<source>Saving file %x...</source>
-<target>שומר קובץ %x...</target>
-
<source>Items processed:</source>
<target>אלמנטים עובדו:</target>
@@ -647,14 +695,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>אין מספיק מקום דיסק פנוי ב:</target>
-<source>Required:</source>
-<target>נדרש:</target>
-
<source>Available:</source>
<target>זמין:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>ריבוי זוגות תיקיות נכתבים לתת תיקייה משותפת. בדוק את הקונפיגורציה שלך.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>קבצים מסויימים יסונכרנו כחלק מתיקיות בסיס מרובות.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>כדי למנוע התנגשויות, הגדר מסננים לאי הכללת קבצים כך שכל קובץ מעודכן ייחשב על ידי תיקיית בסיס אחת.</target>
+
+<source>Versioning folder:</source>
+<target>תיקיית גרסאות:</target>
+
+<source>Base folder:</source>
+<target>תיקיית בסיס:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>תיקיית הגרסאות תסונכרן מכיוון שהיא כלולה בתיקיית בסיס.</target>
<source>Synchronizing folder pair:</source>
<target>מסנכרן זוג תיקיות:</target>
@@ -662,6 +719,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>מייצר מסד נתונים...</target>
+<source>Loading...</source>
+<target>טוען...</target>
+
<source>job name</source>
<target>שם משימה</target>
@@ -785,15 +845,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>אנא בחר תיקייה במערכת הקבצים המקומית, ברשת או בהתקן MTP.</target>
-<source>SFTP folder</source>
-<target>תיקיית SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>בחר תיקיית SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>בחר סוג תיקייה חלופי</target>
-
<source>&New</source>
<target>&חדש</target>
@@ -839,11 +890,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&כלים</target>
-<source>&Check for new version</source>
-<target>&בדוק קיום גירסה חדשה</target>
-
-<source>&Check now</source>
-<target>&בדוק עכשיו</target>
+<source>&Check for updates now</source>
+<target>&בדוק האם יש עדכונים עכשיו</target>
<source>Check &automatically once a week</source>
<target>בדוק &אוטומטית אחת לשבוע</target>
@@ -863,6 +911,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>הסר זוג תיקיות</target>
+<source>Access online storage</source>
+<target>גש לאחסון מכוון</target>
+
<source>Swap sides</source>
<target>החלף צדדים</target>
@@ -950,9 +1001,6 @@ The command is triggered if:
<source>Include:</source>
<target>כלול:</target>
-<source>Exclude:</source>
-<target>לא לכלול:</target>
-
<source>Show examples</source>
<target>הראה דוגמאות</target>
@@ -1036,8 +1084,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>סדר זוג תיקיות</target>
-<source>Enter your SFTP login details:</source>
-<target>הכנס את נתוני הכניסה שלך ל-SFTP:</target>
+<source>Enter your login details:</source>
+<target>הזן את פרטי הגישה שלך:</target>
+
+<source>Connection type:</source>
+<target>סוג חיבור:</target>
<source>Server name or IP address:</source>
<target>שם שרת או כתובת IP:</target>
@@ -1045,11 +1096,29 @@ The command is triggered if:
<source>Port:</source>
<target>יציאה:</target>
+<source>Encryption:</source>
+<target>הצפנה:</target>
+
+<source>&Disabled</source>
+<target>&לא מאופשר</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&SSL/TLS מפורש</target>
+
+<source>Authentication:</source>
+<target>אימות:</target>
+
+<source>&Password</source>
+<target>&סיסמה</target>
+
+<source>&Key file</source>
+<target>&קטבץ מפתח</target>
+
<source>User name:</source>
<target>שם משתמש:</target>
-<source>Password:</source>
-<target>סיסמה:</target>
+<source>Private key file:</source>
+<target>קובץ מפתח פרטי:</target>
<source>&Show password</source>
<target>&הצג סיסמה</target>
@@ -1057,6 +1126,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>מחיצה על שרת:</target>
+<source>Performance improvements:</source>
+<target>שיפורים בביצועים:</target>
+
+<source>How to get best performance?</source>
+<target>כיצד לקבל את הביצועים הטובים ביותר?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>חיבורי SSH לקריאת מחיצות:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>טווח מוצע: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>ערוצי SFTP לחיבור:</target>
+
+<source>Detect server limit</source>
+<target>גלה את גבול השרת</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 חיבורים x 10 ערוצים = קריאת מחיצה מהירה יותר פי 20</target>
+
<source>Select a directory on the server:</source>
<target>בחר מחיצה על השרת:</target>
@@ -1186,6 +1276,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>קוד מקור נכתב ב- C++‎ באמצעות:</target>
+<source>Donation details</source>
+<target>פרטי תרומה:</target>
+
<source>If you like FreeFileSync:</source>
<target>במידה ו-FreeFileSync מוצאת חן בעינכם:</target>
@@ -1195,11 +1288,11 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>משוב והצעות יתקבלו בברכה</target>
-<source>Homepage</source>
-<target>אתר-הבית:</target>
+<source>Home page</source>
+<target>דף הבית</target>
<source>Email</source>
-<target>דוא"ל:</target>
+<target>דוא"ל</target>
<source>Published under the GNU General Public License</source>
<target>מפורסם במסגרת GNU General Public License</target>
@@ -1207,8 +1300,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>תודות עבור תרגום שפות:</target>
-<source>SSH File Transfer Protocol</source>
-<target>פרוטוקול העברת קבצים SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>הפעל את מהדורת התרומות של FreeFileSync באחת מהשיטות הבאות:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. הפעל באמצעות האינטרנט עכשיו:</target>
+
+<source>Activate online</source>
+<target>הפעלה מקוונת</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. קבל מפתח הפעלה למערכת לא מקוונת מן הלינק הבא:</target>
+
+<source>&Copy to clipboard</source>
+<target>&העתק ללוח</target>
+
+<source>Enter activation key:</source>
+<target>הכנס מפתח הפעלה:</target>
+
+<source>Activate offline</source>
+<target>הפעלה בלתי מקוונת</target>
<source>Save as Batch Job</source>
<target>שמור כמשימת אצווה</target>
@@ -1225,6 +1336,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>בחר טווח זמן</target>
+<source>FreeFileSync Donation Edition</source>
+<target>מהדורת תרומות של FreeFileSync</target>
+
<source>&Options</source>
<target>&אפשרויות</target>
@@ -1246,8 +1360,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>מבט כללי</target>
-<source>&Download</source>
-<target>&הורד</target>
+<source>&Show details</source>
+<target>&הראה פרטים</target>
<source>A new version of FreeFileSync is available:</source>
<target>גירסה חדשה של FreeFileSync זמינה:</target>
@@ -1486,8 +1600,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>יומן</target>
-<source>Loading...</source>
-<target>טוען...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>קבצי ההתקנה פגומים. בבקשה התקן מחדש את FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>תודה לך %x, עבור תרומתך ותמיכתך!</target>
+
+<source>Password:</source>
+<target>סיסמה:</target>
+
+<source>Key password:</source>
+<target>סיסמת מפתח:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1669,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&הראה</target>
+<source>Downloading update...</source>
+<target>מוריד עדכון...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>זהה קבצים זהים באמצעות השוואת תג הזמן והגודל.</target>
@@ -1639,12 +1765,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>אחוז</target>
+<source>Failed to retrieve update information.</source>
+<target>קבלת נתוני עדכון נכשלה.</target>
+
+<source>Automatic updates:</source>
+<target>עדכונים אוטומטיים:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>נדרשת מהדורת התרומות של FreeFileSync</target>
+
<source>Check for Program Updates</source>
<target>בדוק קיום עדכוני תוכנה</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>האם לעדכן באופן אוטומטי עכשיו או באמצעות הורדנ ידנית מדף הבית של FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&עדכון אוטומטי</target>
+
+<source>&Home page</source>
+<target>&דף הבית</target>
+
<source>Download now?</source>
<target>הורד עכשיו?</target>
+<source>&Download</source>
+<target>&הורד</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync מעודכן לגירסה האחרונה.</target>
@@ -1657,14 +1804,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>בדיקת עקביות נכשלה עבור %x.</target>
-<source>Cannot find system function %x.</source>
-<target>לא יכול למצוא פונקצית מערכת %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>ההתקנה נרשמה במערכת הפעלה אחרת.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>הפעלת מהדורת תרומות של FreeFileSync נכשלה/.</target>
+
+<source>Incorrect activation key.</source>
+<target>מפתח הפעלה לא מתאים.</target>
<source>Unable to register to receive system messages.</source>
<target>לא ניתן להרשם לקבלת הודעות מערכת.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>קבצי התקנה פגועים. בבקשה התקן מחדש את FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>לא יכול למצוא פונקצית מערכת %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>לא יכול לרשום הודעות עבור התקן %x.</target>
@@ -1696,9 +1849,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>לא יכול להעתיק תכונות מ- %x אל %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>סוג של פריט %x אינו נתמך:</target>
-
<source>%x TB</source>
<target>%x טרה בייט</target>
@@ -1750,9 +1900,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>קובץ תצורה %x אינו שלם. הרכיבים החסרים יוגדרו עם ערכי ברירת המחדל.</target>
-<source>Internet access failed.</source>
-<target>גישה לאינטרנט נכשלה.</target>
-
<source>Prepare installation</source>
<target>מכין התקנה</target>
@@ -1822,18 +1969,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>ערוך עם FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>תודה עבור תרומתך ותמיכתך!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>ההקצבה היומית של התקנה זו לתורמים של FreeFileSync פקעה.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>האם להוריד את הגירסה הרגילה של FreeFileSync מאתר הבית עכשיו?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>הגירסה הניידת אינה יכולה להיות מותקנת לתיקייה שנבחרה.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>בבקשה בחר התקנה מקומית או בחר תיקייה אחרת להתקנה.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>התקנה שקטה אפשרית רק במהדורת התרומות של FreeFileSync.</target>
+
diff --git a/FreeFileSync/Build/Languages/hindi.lng b/FreeFileSync/Build/Languages/hindi.lng
index 41d5717d..fc413e9b 100755
--- a/FreeFileSync/Build/Languages/hindi.lng
+++ b/FreeFileSync/Build/Languages/hindi.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>डिफ़ॉल्ट सिंक्रनाइज़ेशन दिशाएँ सेट हो रही हैं: पुराने फ़ाइल्स नए फ़ाइल्स से अधिलेखित होंगे।</target>
-<source>Creating folder %x</source>
-<target>फ़ोल्डर %x बनाया हा रहा है</target>
-
<source>Creating file %x</source>
<target>फ़ाइल %x बनाई जा रही है</target>
+<source>Creating folder %x</source>
+<target>फ़ोल्डर %x बनाया हा रहा है</target>
+
<source>Creating symbolic link %x</source>
<target>प्रतीकात्मक कड़ी %x बनाया जा रहा है</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>इस त्रुटि को अनदेखा कर दिया जाता है तो फ़ोल्डरों को खाली माना जाएगा। अनुपस्थित फ़ोलडर्स आवश्यकता होने पर स्वचालित रूप से बनाए जाते हैं।</target>
-<source>A folder input field is empty.</source>
-<target>कोई फ़ोल्डर इनपुट प्रविष्टि खाली है।</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>तद्नुरूप फ़ोल्डर को खाली माना जाएगा।</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>निम्न फ़ोलडर्स के पथ एक दूसरे पर निर्भर हैं:</target>
-
<source>File %x has an invalid date.</source>
<target>%x फ़ाइल का दिनांक अवैध है।</target>
<source>Date:</source>
<target>दिनांक:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>%x फ़ाइल्स का दिनांक समान है पर आकार भिन्न है।</target>
+<source>Files have the same date but a different size.</source>
+<target>फाइल्स का दिनांक समान है पर आकार भिन्न है।</target>
<source>Size:</source>
<target>आकार:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>%x अपवर्जित फ़ाइल्स के लिए सामग्री तुलना छोड़ दी गई।</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>अपवर्जित फ़ाइल्स के लिए सामग्री तुलना को छोड़ा गया।</target>
<source>Items differ in attributes only</source>
<target>आइटम्स के केवल गुण ही भिन्न हैं।</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>तुलना शुरू हो रही है</target>
+<source>A folder input field is empty.</source>
+<target>कोई फ़ोल्डर इनपुट प्रविष्टि खाली है।</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>तद्नुरूप फ़ोल्डर को खाली माना जाएगा।</target>
+
+<source>Exclude:</source>
+<target>वर्जित करें:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>फ़ोल्डर जोड़ी में से एक आधार फ़ोल्डर दूसरे में निहित है।</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>फ़ोल्डर को सिंक्रनाइज़ेशन से फ़िल्टर द्वारा अपवर्जित किया जाना चाहिए।</target>
+
<source>Calculating sync directions...</source>
<target>सिंक्रनाइज़ेशन दिशा का परिकलन हो रहा है...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>दाईं तरफ के गुण अद्यतन करें</target>
-<source>Cannot write permissions of %x.</source>
-<target>%x की अनुमतियां लिख नहीं सकते।</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>भिन्न मूल फ़ोल्डर प्रकारों के लिए कार्यवाई समर्थित नहीं।</target>
-
<source>Cannot write file %x.</source>
<target>फ़ाइल %x लिखने में असमर्थ।</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
वास्तविक: %y बाइट्स
</target>
+<source>Cannot write permissions of %x.</source>
+<target>%x की अनुमतियां लिख नहीं सकते।</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>भिन्न आधार फ़ोल्डर प्रकारों के लिए कार्यवाई समर्थित नहीं।</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>सिंबॉलिक लिंक %x से %y प्रतिलिपित नहीं कर सकते।</target>
<source>Cannot move file %x to %y.</source>
<target>फ़ाइल %x से %y ले जा नाहीं सकते।</target>
-<source>Cannot enumerate directory %x.</source>
-<target>निर्देशिका %x इन्यूमरेट नहीं कर सकते।</target>
+<source>Unable to connect to %x.</source>
+<target>%x से कनेक्ट करने में असमर्थ।</target>
-<source>Cannot read file attributes of %x.</source>
-<target>%x के फ़ाइल गुण पढ़ने में असमर्थ।</target>
+<source>Failed to get information about server %x.</source>
+<target>सर्वर %x की जानकारी प्राप्त करने में विफल।</target>
-<source>Cannot find %x.</source>
-<target>%x नहीं मिला।</target>
+<source>Cannot open directory %x.</source>
+<target>निर्देशिका %x खोल नहीं सकते।</target>
-<source>Cannot open file %x.</source>
-<target>%x फ़ाइल को खोलने में असमर्थ।</target>
+<source>Cannot read directory %x.</source>
+<target>निर्देशिका %x को पढ़ा नहीं जा सकता।</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>%x के फ़ाइल गुण पढ़ने में असमर्थ।</target>
<source>Cannot read file %x.</source>
<target>फ़ाइल %x पढ़ने में असमर्थ।</target>
-<source>Cannot find device %x.</source>
-<target>डिवाइस %x नहीं मिला।</target>
-
<source>Cannot create directory %x.</source>
<target>%x निर्देशिका बना नहीं सकते।</target>
-<source>Cannot delete directory %x.</source>
-<target>निर्देशिका %x हटा नहीं सकते।</target>
-
<source>Cannot delete file %x.</source>
<target>फ़ाइल %x हटा नहीं सकते।</target>
+<source>Cannot delete directory %x.</source>
+<target>निर्देशिका %x हटा नहीं सकते।</target>
+
<source>Cannot write modification time of %x.</source>
<target>%x का संशोधन समय लिख नहीं सकते।</target>
@@ -309,23 +315,65 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>सिंबॉलिक लिंक %x को हल नहीं कर सकते।</target>
-<source>Cannot open directory %x.</source>
-<target>निर्देशिका %x खोल नहीं सकते।</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x को रीसायकल बिन ले जाने में असमर्थ।</target>
+
+<source>Cannot open file %x.</source>
+<target>%x फ़ाइल को खोलने में असमर्थ।</target>
+
+<source>Cannot find device %x.</source>
+<target>डिवाइस %x नहीं मिला।</target>
+
+<source>Cannot find %x.</source>
+<target>%x नहीं मिला।</target>
+
+<source>Type of item %x is not supported:</source>
+<target>%x प्रकार का आइटम समर्थित नहीं है:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>प्रतीकात्मक कड़ी %x हटाया नहीं जा सकता।</target>
<source>Cannot determine free disk space for %x.</source>
<target>%x के लिए खाली डिस्क जगह निर्धारित नहीं कर सकते।</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x को रीसायकल बिन ले जाने में असमर्थ।</target>
-
<source>Incorrect command line:</source>
<target>अनुचित आदेश-पंक्ति:</target>
-<source>Error Code %x:</source>
-<target>त्रुटि कोड %x:</target>
+<source>Error Code %x</source>
+<target>त्रुटि कोड %x</target>
-<source>Unable to connect to %x.</source>
-<target>%x से कनेक्ट करने में असमर्थ।</target>
+<source>The server does not support authentication via %x.</source>
+<target>सर्वर पर %x द्वारा प्रमाणन समर्थित नहीं है।</target>
+
+<source>Required:</source>
+<target>आवश्यक:</target>
+
+<source>Unable to access %x.</source>
+<target>%x तक पहुँचने में असमर्थ।</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>1 सेकंड के बाद कार्यवाई का काल समाप्त हुआ।</pluralform>
+<pluralform>%x सेकंड्स के बाद कार्यवाई का काल समाप्त हुआ।</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>एक समय में 1 कनेक्शन से अधिक पर प्रतीक्षा नहीं कर सकते।</pluralform>
+<pluralform>एक समय में %x कनेक्शन्स से अधिक पर प्रतीक्षा नहीं कर सकते।</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>सक्रिय कनेक्शन्स: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>SFTP चैनल संख्या %x को खोलने में विफल।</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>डेटाबेस फ़ाइल %x अभी तक मौजूद नहीं है।</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>डेटाबेस फ़ाइल दूषित है:</target>
-<source>Database files do not share a common session.</source>
-<target>डेटाबेस फ़ाइल्स कोई आम सत्र साझा नहीं करते।</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>डेटाबेस फ़ाइल्स में अभी तक पिछले सिंक्रनाइज़ेशन की जानकारी नहीं है।</target>
+
+<source>Loading file %x...</source>
+<target>फ़ाइल %x को लोड किया जा रहा है...</target>
+
+<source>Saving file %x...</source>
+<target>फ़ाइल %x सहेजी जा रही है...</target>
<source>Searching for folder %x...</source>
<target>फ़ोल्डर %x की खोज हो रही है...</target>
@@ -390,9 +444,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>अपसर्जित अवरोध पता लगाया जा रहा है...</target>
-<source>Saving file %x...</source>
-<target>फ़ाइल %x सहेजी जा रही है...</target>
-
<source>Items processed:</source>
<target>संसाधित आइटम्स:</target>
@@ -647,14 +698,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>यहाँ पर्याप्त खाली डिस्क जगह उपलब्ध नहीं:</target>
-<source>Required:</source>
-<target>आवश्यक:</target>
-
<source>Available:</source>
<target>उपलब्ध:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>एकाधिक फ़ोल्डर जोडें समान उपफ़ोल्डर में लिखते हैं। कृपया अपने कॉन्फ़िगरेशन की समीक्षा करें।</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>कुछ फ़ाइल्स को एकाधिक आधार फ़ोल्डर्स के भाग के रूप में सिंक्रनाइज़ किया जाएगा।</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>विरोधों से बचने के लिए अपवर्जित फ़िल्टर्स सेट करें ताकि प्रत्येक अद्यतित फ़ाइल केवल एक ही आधार फ़ोल्डर से मानी जाएगी।</target>
+
+<source>Versioning folder:</source>
+<target>संस्करण फ़ोल्डर:</target>
+
+<source>Base folder:</source>
+<target>आधार फ़ोल्डर:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>संस्करण फ़ोल्डर को सिंक्रनाइज़ किया जाएगा क्योंकी वह एक आधार फ़ोल्डर में निहित है।</target>
<source>Synchronizing folder pair:</source>
<target>यह फ़ोल्डर जोडा सिंक्रनाइज़ हो रहा है:</target>
@@ -662,6 +722,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>डेटाबेस बनाया जा रहा है...</target>
+<source>Loading...</source>
+<target>लोड हो रहा है...</target>
+
<source>job name</source>
<target>कार्य नाम</target>
@@ -785,15 +848,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>स्थानीय फ़ाइल सिस्टम, नेटवर्क या MTP डिव्हाइस पर कोई निर्देशिका चुनें।</target>
-<source>SFTP folder</source>
-<target>SFTP फ़ोल्डर</target>
-
-<source>Select SFTP folder</source>
-<target>SFTP फ़ोल्डर चुनें</target>
-
-<source>Select alternative folder type</source>
-<target>वैकल्पिक फ़ोल्डर प्रकार चुनें</target>
-
<source>&New</source>
<target>नया (&N)</target>
@@ -839,11 +893,8 @@ The command is triggered if:
<source>&Tools</source>
<target>उपकरण (&T)</target>
-<source>&Check for new version</source>
-<target>नए संस्करण के लिए जांचें (&C)</target>
-
-<source>&Check now</source>
-<target>अभी जांचें (&C)</target>
+<source>&Check for updates now</source>
+<target>अद्यतन के लिए अभी जाँचें (&C)</target>
<source>Check &automatically once a week</source>
<target>सप्ताह में एक बार स्वचालित रूप से जांचें (&a)</target>
@@ -863,6 +914,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>फ़ोल्डर जोडा निकालें</target>
+<source>Access online storage</source>
+<target>ऑनलाइन संग्रहण पहुँच प्राप्त करें</target>
+
<source>Swap sides</source>
<target>पक्ष गमागम करें</target>
@@ -950,9 +1004,6 @@ The command is triggered if:
<source>Include:</source>
<target>शामिल करें:</target>
-<source>Exclude:</source>
-<target>वर्जित करें:</target>
-
<source>Show examples</source>
<target>उदाहरण दिखाएं</target>
@@ -1036,8 +1087,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>फ़ोल्डर जोडा व्यवस्थित करें</target>
-<source>Enter your SFTP login details:</source>
-<target>आपके SFTP लॉगइन विवरण प्रविष्ट करें:</target>
+<source>Enter your login details:</source>
+<target>अपना लॉगिन विवरण प्रविष्ट करें:</target>
+
+<source>Connection type:</source>
+<target>कनेक्शन प्रकार:</target>
<source>Server name or IP address:</source>
<target>सर्वर नाम या IP पता:</target>
@@ -1045,11 +1099,29 @@ The command is triggered if:
<source>Port:</source>
<target>पोर्ट:</target>
+<source>Encryption:</source>
+<target>एन्क्रिप्शन:</target>
+
+<source>&Disabled</source>
+<target>अक्षम (&D)</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>सुस्पष्ट SSL/TLS (&E)</target>
+
+<source>Authentication:</source>
+<target>प्रमाणन:</target>
+
+<source>&Password</source>
+<target>पासवर्ड (&P)</target>
+
+<source>&Key file</source>
+<target>कुंजी फ़ाइल (&K)</target>
+
<source>User name:</source>
<target>उपयोगकर्ता नाम:</target>
-<source>Password:</source>
-<target>पासवर्ड:</target>
+<source>Private key file:</source>
+<target>निजी कुंजी फ़ाइल:</target>
<source>&Show password</source>
<target>पासवर्ड दिखाएं (&S)</target>
@@ -1057,6 +1129,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>सर्वर पर निर्देशिका:</target>
+<source>Performance improvements:</source>
+<target>प्रदर्शन सुधार:</target>
+
+<source>How to get best performance?</source>
+<target>सर्वश्रेष्ठ प्रदर्शन कैसे पाएं?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>निर्देशिका पठन के लिए SSH कनेक्शन्स:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>सुझाई श्रेणी: [१ - १०]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP चैनल्स प्रति कनेक्शन:</target>
+
+<source>Detect server limit</source>
+<target>सर्वर सीमा का पता लगाएँ</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>२ कनेक्शन्स x १० चैनल्स = २० गुना तीव्रतम निर्देशिका पठन</target>
+
<source>Select a directory on the server:</source>
<target>सर्वर पर कोई निर्देशिका चुनें:</target>
@@ -1186,6 +1279,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>स्रोत कोड C++ में लिखा गया इनके प्रयोग से:</target>
+<source>Donation details</source>
+<target>दान विवरण</target>
+
<source>If you like FreeFileSync:</source>
<target>यदि आपको FreeFileSync पसंद है:</target>
@@ -1195,8 +1291,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>प्रतिक्रिया और सुझावों का स्वागत है</target>
-<source>Homepage</source>
-<target>मुखपृष्ठ</target>
+<source>Home page</source>
+<target>मुख पृष्ठ</target>
<source>Email</source>
<target>ई-मेल</target>
@@ -1207,8 +1303,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>स्थानीयकरण के लिए अनेक आभार:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH फ़ाइल स्थानांतरण प्रोटोकॉल</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>FreeFileSync दान संस्‍करण को निम्न विधियों में से एक के द्वारा सक्रिय करें:</target>
+
+<source>1. Activate via internet now:</source>
+<target>१. इंटरनेट द्वारा अभी सक्रिय करें:</target>
+
+<source>Activate online</source>
+<target>ऑनलाइन सक्रिय करें</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>२. ऑफ़लाइन सक्रियण कुंजी निम्न URL से प्राप्त करें:</target>
+
+<source>&Copy to clipboard</source>
+<target>क्लिपबोर्ड पर प्रतिलिपि बनाएँ (&C)</target>
+
+<source>Enter activation key:</source>
+<target>सक्रियण कुंजी प्रविष्ट करें:</target>
+
+<source>Activate offline</source>
+<target>ऑफ़लाइन सक्रिय करें</target>
<source>Save as Batch Job</source>
<target>बॅच जॉब के रूप में सहेजें</target>
@@ -1225,6 +1339,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>समय अवधि चुनें</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync दान संस्‍करण</target>
+
<source>&Options</source>
<target>विकल्प (&O)</target>
@@ -1246,8 +1363,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>अवलोकन</target>
-<source>&Download</source>
-<target>डाउनलोड (&D)</target>
+<source>&Show details</source>
+<target>विवरण दिखाएँ (&S)</target>
<source>A new version of FreeFileSync is available:</source>
<target>FreeFileSync का नया संस्करण उपलब्ध है:</target>
@@ -1486,8 +1603,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>लॉग</target>
-<source>Loading...</source>
-<target>लोड हो रहा है...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>स्थापना फ़ाइलें दूषित हैं। FreeFileSync पुनर्स्थापित करें।</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>धन्यवाद, %x, आपके दान और समर्थन के लिए!</target>
+
+<source>Password:</source>
+<target>पासवर्ड:</target>
+
+<source>Key password:</source>
+<target>कुंजी पासवर्ड:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>दिखाएं (&S)</target>
+<source>Downloading update...</source>
+<target>अद्यतन डाउनलोड हो रहा है...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>समान फ़ाइल्स पहचानने के लिए संशोधन समय और आकार की तुलना करें।</target>
@@ -1639,12 +1768,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>प्रतिशत</target>
+<source>Failed to retrieve update information.</source>
+<target>अद्यतन जानकारी प्राप्त करने में विफल।</target>
+
+<source>Automatic updates:</source>
+<target>स्वचालित अद्यतन:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>FreeFileSync दान संस्‍करण आवश्यक</target>
+
<source>Check for Program Updates</source>
<target>प्रोग्राम अद्यतनों के लिए जाँच करें</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>स्वत: अद्यतन करें या मैन्युअल रूप से FreeFileSync मुख पृष्ठ से डाउनलोड करें?</target>
+
+<source>&Auto-update</source>
+<target>स्वत: अद्यतन करें (&A)</target>
+
+<source>&Home page</source>
+<target>मुख पृष्ठ (&H))</target>
+
<source>Download now?</source>
<target>अभी डाउनलोड करें?</target>
+<source>&Download</source>
+<target>डाउनलोड (&D)</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync नवीनतम है।</target>
@@ -1657,14 +1807,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>%x की संगतता जाँच विफल।</target>
-<source>Cannot find system function %x.</source>
-<target>सिस्टम फ़ंकशन %x ढूंढ नहीं सकते।</target>
+<source>Installation was registered on a different operating system.</source>
+<target>स्थापना किसी अन्य ऑपरेटिंग सिस्टम पर पंजीकृत है।</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>FreeFileSync दान संस्‍करण सक्रिय करने में विफल।</target>
+
+<source>Incorrect activation key.</source>
+<target>अनुचित सक्रियण कुंजी।</target>
<source>Unable to register to receive system messages.</source>
<target>सिस्टम संदेशों को प्राप्त करने के लिए पंजीकृत करने में असमर्थ।</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>स्थापना फ़ाइल्स दूषित हैं। कृपया FreeFileSync पुन:-स्थापित करें।</target>
+<source>Cannot find system function %x.</source>
+<target>सिस्टम फ़ंकशन %x ढूंढ नहीं सकते।</target>
<source>Unable to register device notifications for %x.</source>
<target>%x के लिए डिवाइस सूचनाएँ पंजिकृत करने में असमर्थ।</target>
@@ -1696,9 +1852,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>%x से %y गुण प्रतिलिपित नहीं कर सकते।</target>
-<source>Type of item %x is not supported:</source>
-<target>%x प्रकार का आइटम समर्थित नहीं है:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>कॉन्फ़िगरेशन फ़ाइल %x अधूरी है। अनुपस्थित तत्व उनके डिफ़ॉल्ट मानों से सेट होंगे।</target>
-<source>Internet access failed.</source>
-<target>इंटरनेट पहुँच विफल।</target>
-
<source>Prepare installation</source>
<target>स्थापना तैयारी</target>
@@ -1822,18 +1972,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>FreeFileSync के साथ संपादित करें</target>
-<source>Thanks for your donation and support!</source>
-<target>आपके दान और समर्थन के लिए धन्यवाद!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>यह दाताओं के लिए FreeFileSync इंस्टॉलर अपनी दैनिक स्थापना सीमा तक पहुँचा है।</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>नियमित संस्करण FreeFileSync मुखपृष्ठ से अभी डाउनलोड करें?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>पोर्टेबल संस्करण चयनित फ़ोल्डर में स्थापित नहीं किया जा सकता।</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>स्थापना के लिए कृपया स्थानीय स्थापना प्रकार चयन करें या कोई और फ़ोल्डर चुनें।</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>अपरिचालित स्थापना केवल FreeFileSync दान संस्‍करण में ही उपलब्ध है।</target>
+
diff --git a/FreeFileSync/Build/Languages/hungarian.lng b/FreeFileSync/Build/Languages/hungarian.lng
index ea752bf5..d069319a 100755
--- a/FreeFileSync/Build/Languages/hungarian.lng
+++ b/FreeFileSync/Build/Languages/hungarian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Alapértelmezett szinkronizálási irányok beállítása: a régebbi fájlokat írja felül az újabbakkal.</target>
-<source>Creating folder %x</source>
-<target>%x könyvtár létrehozása</target>
-
<source>Creating file %x</source>
<target>%x fájl létrehozása</target>
+<source>Creating folder %x</source>
+<target>%x könyvtár létrehozása</target>
+
<source>Creating symbolic link %x</source>
<target>%x szimbolikus hivatkozás létrehozása</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Ha ezt a hibát figyelmen kívül hagyja, a könytárakat üresnek tekinti a program. A hiányzó könyvtárakat automatikusan létrehozza, amikor szükséges.</target>
-<source>A folder input field is empty.</source>
-<target>A könyvtár beviteli mező üres.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>A kapcsolódó könyvtárat üresként kezeli.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>A következő könyvtárak elérési útvonalai függenek egymástól:</target>
-
<source>File %x has an invalid date.</source>
<target>%x fájl dátuma érvénytelen.</target>
<source>Date:</source>
<target>Dátum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>A(z) %x fájlok dátuma megegyezik, de a méretük nem.</target>
+<source>Files have the same date but a different size.</source>
+<target>A fájlok azonos dátumúak, de eltérő méretűek.</target>
<source>Size:</source>
<target>Méret:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>%x kizárt fájlok esetében a tartalom összehasonlítását átugrotta.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>A kizárt fájlok tartalmának összehasonlítása kihagyva.</target>
<source>Items differ in attributes only</source>
<target>Az elemek csak attribútumaikban különböznek</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Összehasonlítás megkezdése</target>
+<source>A folder input field is empty.</source>
+<target>A könyvtár beviteli mező üres.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>A megfelelő könyvtárat üresként kezeli.</target>
+
+<source>Exclude:</source>
+<target>Zárja ki:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>A könyvtár-pár egyik eleme be van ágyazva a másikba.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>A könyvtárat szűrő használatával lehet a szinkronizálásából kizárni.</target>
+
<source>Calculating sync directions...</source>
<target>Szinkronizálási irányok számítása...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Attribútumok frissítése a jobb oldalon</target>
-<source>Cannot write permissions of %x.</source>
-<target>%x jogosultságait nem lehet felírni.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>A művelet nem támogatott különböző alapkönyvtártípusok esetén.</target>
-
<source>Cannot write file %x.</source>
<target>%x fájl írása sikertelen.</target>
@@ -264,42 +264,48 @@ Actual: %y bytes
<target>
Az adatfolyam mérete eltér a várttól
Várt: %x bájt
-Jelenlegi: %y bájt
+Tényleges: %y bájt
</target>
+<source>Cannot write permissions of %x.</source>
+<target>%x jogosultságait nem lehet felírni.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>A művelet nem támogatott különböző alapkönyvtártípusok esetén.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>%x szimbolikus hivatkozás nem másolható %y-ba.</target>
<source>Cannot move file %x to %y.</source>
<target>%x fájl nem mozgatható %y-ba.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>%x könyvtár nem besorolható.</target>
+<source>Unable to connect to %x.</source>
+<target>Nem képes %x-hez kapcsolódni.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>%x fájl attribútumai nem olvashatók.</target>
+<source>Failed to get information about server %x.</source>
+<target>%x szerverről nem sikerült információt kapni.</target>
-<source>Cannot find %x.</source>
-<target>%x nem található.</target>
+<source>Cannot open directory %x.</source>
+<target>%x könyvtár nem nyitható meg.</target>
-<source>Cannot open file %x.</source>
-<target>%x fájl nem nyitható meg.</target>
+<source>Cannot read directory %x.</source>
+<target>%x könyvtár nem olvasható.</target>
<source>Cannot read file %x.</source>
<target>%x fájl nem olvasható.</target>
-<source>Cannot find device %x.</source>
-<target>%x eszköz nem található.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>%x fájl attribútumai nem olvashatók.</target>
<source>Cannot create directory %x.</source>
<target>%x könyvtár nem hozható létre.</target>
-<source>Cannot delete directory %x.</source>
-<target>%x könyvtár nem törölhető.</target>
-
<source>Cannot delete file %x.</source>
<target>%x fájl nem törölhető.</target>
+<source>Cannot delete directory %x.</source>
+<target>%x könyvtár nem törölhető.</target>
+
<source>Cannot write modification time of %x.</source>
<target>%x módosításának időpontja nem rögzíthető.</target>
@@ -309,23 +315,65 @@ Jelenlegi: %y bájt
<source>Cannot resolve symbolic link %x.</source>
<target>%x szimbolikus hivatkozás nem oldható fel.</target>
-<source>Cannot open directory %x.</source>
-<target>%x könyvtár nem nyitható meg.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x nem helyezhető Lomtárba.</target>
+
+<source>Cannot open file %x.</source>
+<target>%x fájl nem nyitható meg.</target>
+
+<source>Cannot find device %x.</source>
+<target>%x eszköz nem található.</target>
+
+<source>Cannot find %x.</source>
+<target>%x nem található.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>%x elem típusa nem támogatott:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>%x szimbolikus hivatkozás nem törölhető.</target>
<source>Cannot determine free disk space for %x.</source>
<target>%x-en nem határozható meg a szabad tárterület.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x nem helyezhető Lomtárba.</target>
-
<source>Incorrect command line:</source>
<target>Hibás parancssor:</target>
-<source>Error Code %x:</source>
-<target>Hibakód %x:</target>
+<source>Error Code %x</source>
+<target>Hibakód %x</target>
-<source>Unable to connect to %x.</source>
-<target>Nem képes %x-hez kapcsolódni.</target>
+<source>The server does not support authentication via %x.</source>
+<target>A szerver nem támogatja a %x általi autentikációt.</target>
+
+<source>Required:</source>
+<target>Szükséges:</target>
+
+<source>Unable to access %x.</source>
+<target>%x nem elérhető.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>A művelet 1 másodperc után időtúllépés miatt leállt.</pluralform>
+<pluralform>A művelet %x másodperc után időtúllépés miatt leállt.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Nem tud 1-nél több kapcsolatra várni egyidejűleg.</pluralform>
+<pluralform>Nem tud több mint %x kapcsolatra várni egyidejűleg.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktív kapcsolatok száma: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Hiba a %x számú SFTP csatorna megnyitása során.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -349,7 +397,7 @@ Jelenlegi: %y bájt
<target>%x fájl betöltése sikertelen.</target>
<source>Database file %x is incompatible.</source>
-<target>%x adatbázisfájl inkompatibilis: .</target>
+<target>%x adatbázisfájl inkompatibilis.</target>
<source>Initial synchronization:</source>
<target>Kezdeti szinkronizálás:</target>
@@ -357,11 +405,17 @@ Jelenlegi: %y bájt
<source>Database file %x does not yet exist.</source>
<target>%x adatbázisfájl még nem létezik.</target>
-<source>Database file is corrupt:</source>
-<target>Sérült adatbázisfájl:</target>
+<source>Database file is corrupted:</source>
+<target>A következő adatbázis fájl sérült:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Az adatbázis fájlok nem tartalmaznak információt a legutóbbi szinkronizálásról.</target>
-<source>Database files do not share a common session.</source>
-<target>Az adatbázisfájloknak nincs közös munkafolyamatuk.</target>
+<source>Loading file %x...</source>
+<target>%x fájl betöltése...</target>
+
+<source>Saving file %x...</source>
+<target>%x fájl mentése...</target>
<source>Searching for folder %x...</source>
<target>%x könyvtár keresése...</target>
@@ -390,9 +444,6 @@ Jelenlegi: %y bájt
<source>Detecting abandoned lock...</source>
<target>Elhagyott zárolást érzékel...</target>
-<source>Saving file %x...</source>
-<target>%x fájl mentése...</target>
-
<source>Items processed:</source>
<target>Feldolgozott elemek száma:</target>
@@ -647,21 +698,33 @@ A parancs végrehajtódik, ha:
<source>Not enough free disk space available in:</source>
<target>Nincs elég szabad lemezterület:</target>
-<source>Required:</source>
-<target>Szükséges:</target>
-
<source>Available:</source>
-<target>Szabad:</target>
+<target>Hozzáférhető:</target>
+
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Egyes fájlokat több alapkönyvár részeként is szinkronizálni fog.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Az ütközések elkerülése érdekében állítsa be úgy a kizáró szűrőket, hogy minden egyes felülírt fájl csak egy alapkönyvárban szerepeljen.</target>
+
+<source>Versioning folder:</source>
+<target>Verziókezelő könyvtár:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Több könyvtár-pár írna egy közös alkönyvtárba. Vizsgálja felül a konfigurációját.</target>
+<source>Base folder:</source>
+<target>Alapkönyvtár:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>A verziókezelő könyvtárat szinkronizálni fogja, mert az egy alapkönyvtárba van ágyazva.</target>
<source>Synchronizing folder pair:</source>
-<target>A szinkronizált könyvtár-pár:</target>
+<target>A szinkronizáló könyvtár-pár:</target>
<source>Generating database...</source>
<target>Adatbázis generálása...</target>
+<source>Loading...</source>
+<target>Tölti...</target>
+
<source>job name</source>
<target>feladat neve</target>
@@ -785,15 +848,6 @@ A parancs végrehajtódik, ha:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Kérem válasszon egy könyvtárat a helyi fájlrendszerben, a hálózaton vagy egy MTP eszközön.</target>
-<source>SFTP folder</source>
-<target>SFTP könyvtár</target>
-
-<source>Select SFTP folder</source>
-<target>Válasszon SFTP könyvtárat</target>
-
-<source>Select alternative folder type</source>
-<target>Válasszon alternatív könyvtár-típust</target>
-
<source>&New</source>
<target>&Új</target>
@@ -839,11 +893,8 @@ A parancs végrehajtódik, ha:
<source>&Tools</source>
<target>Es&zközök</target>
-<source>&Check for new version</source>
-<target>&Új verzió keresése</target>
-
-<source>&Check now</source>
-<target>&Ellenőrizze most</target>
+<source>&Check for updates now</source>
+<target>&Új változat keresése most</target>
<source>Check &automatically once a week</source>
<target>&Automatikus ellenőrzés hetente</target>
@@ -863,6 +914,9 @@ A parancs végrehajtódik, ha:
<source>Remove folder pair</source>
<target>Távolítsa el a könyvtár-párt</target>
+<source>Access online storage</source>
+<target>Online tároló elérése</target>
+
<source>Swap sides</source>
<target>Cserélje fel az oldalakat</target>
@@ -950,9 +1004,6 @@ A parancs végrehajtódik, ha:
<source>Include:</source>
<target>Bevonva:</target>
-<source>Exclude:</source>
-<target>Kizárva:</target>
-
<source>Show examples</source>
<target>Mutasson példákat</target>
@@ -1013,10 +1064,10 @@ A parancs végrehajtódik, ha:
<target>Mozgassa a fájlokat egy a felhasználó által meghatározott könyvtárba</target>
<source>Naming convention:</source>
-<target>Elnevezési konvenció:</target>
+<target>Elnevezési megállapodás:</target>
<source>Handle errors:</source>
-<target>A következő hibák kezelése:</target>
+<target>Kezelje a hibákat:</target>
<source>&Pop-up</source>
<target>&Párbeszédablak</target>
@@ -1034,10 +1085,13 @@ A parancs végrehajtódik, ha:
<target>OK</target>
<source>Arrange folder pair</source>
-<target>Rendezze a könyvtár-párt</target>
+<target>Kezelje a könyvtár-párt</target>
-<source>Enter your SFTP login details:</source>
-<target>Adja meg SFTP bejelentkezésének részletei:</target>
+<source>Enter your login details:</source>
+<target>Adja meg a bejelentkezési adatait:</target>
+
+<source>Connection type:</source>
+<target>Kapcsolat típusa:</target>
<source>Server name or IP address:</source>
<target>Szerver neve vagy IP címe:</target>
@@ -1045,11 +1099,29 @@ A parancs végrehajtódik, ha:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Titkosítás:</target>
+
+<source>&Disabled</source>
+<target>&Lekapcsolva</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicit TLS/SSL felett</target>
+
+<source>Authentication:</source>
+<target>Azonosítás:</target>
+
+<source>&Password</source>
+<target>&Jelszó</target>
+
+<source>&Key file</source>
+<target>&Kulcs fájl</target>
+
<source>User name:</source>
<target>Felhasználó név:</target>
-<source>Password:</source>
-<target>Jelszó:</target>
+<source>Private key file:</source>
+<target>Magánkulcs tároló fájl:</target>
<source>&Show password</source>
<target>Muta&ssa a jelszót</target>
@@ -1057,6 +1129,27 @@ A parancs végrehajtódik, ha:
<source>Directory on server:</source>
<target>Könyvtár az alábbi szerveren:</target>
+<source>Performance improvements:</source>
+<target>Teljesítmény növelése:</target>
+
+<source>How to get best performance?</source>
+<target>Hogyan lehet elérni a legjobb teljesítményt?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH kapcsolat könyvtárak olvasásához:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Javasolt tartomány: [1 -10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP csatornák száma kapcsolatonként:</target>
+
+<source>Detect server limit</source>
+<target>Szerver korlátainak észlelése</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 kapcsolat x 10 csatornával = hússzor gyorsabb könyvtár olvasás</target>
+
<source>Select a directory on the server:</source>
<target>Válasszon egy könyvtárat szerveren:</target>
@@ -1186,6 +1279,9 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Source code written in C++ using:</source>
<target>A programot C++-ban fejlesztették a következők felhasználásával:</target>
+<source>Donation details</source>
+<target>Támogatás részletei</target>
+
<source>If you like FreeFileSync:</source>
<target>Ha szereted a FreeFileSync-et:</target>
@@ -1195,7 +1291,7 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Feedback and suggestions are welcome</source>
<target>Várjuk a visszajelzéseket és az ötleteket</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Honlap</target>
<source>Email</source>
@@ -1207,8 +1303,26 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Many thanks for localization:</source>
<target>Köszönet a lokalizációért:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH fájlátviteli protokoll</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktiválja a FreeFileSync Támogatói kiadását a következő módok egyikével:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktiválja most interneten keresztül:</target>
+
+<source>Activate online</source>
+<target>Online aktiválás</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Igényeljen egy offline aktiváló kulcsot a következő URL-ről:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Másolja a vágólapra</target>
+
+<source>Enter activation key:</source>
+<target>Adja meg az aktiváló kulcsot:</target>
+
+<source>Activate offline</source>
+<target>Aktiváljon online módon</target>
<source>Save as Batch Job</source>
<target>Mentse kötegelt feladatként</target>
@@ -1225,6 +1339,9 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Select Time Span</source>
<target>Válassza ki az idősávot (időtartamot)</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Támogatói kiadás</target>
+
<source>&Options</source>
<target>&Beállítások</target>
@@ -1246,8 +1363,8 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Overview</source>
<target>Áttekintés</target>
-<source>&Download</source>
-<target>&Letölt</target>
+<source>&Show details</source>
+<target>Muta&ssa a részleteket</target>
<source>A new version of FreeFileSync is available:</source>
<target>Elérhető a FreeFileSync új verziója:</target>
@@ -1486,8 +1603,17 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Log</source>
<target>Napló</target>
-<source>Loading...</source>
-<target>Tölti...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>A telepítő fájlok sérültek. Installálja újra a FreeFileSync-et.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>%x, köszönöm Önnek adományát és támogatását!</target>
+
+<source>Password:</source>
+<target>Jelszó:</target>
+
+<source>Key password:</source>
+<target>Kulcs jelszó:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>&Show</source>
<target>&Mutat</target>
+<source>Downloading update...</source>
+<target>Frissítés letöltése...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Módosítási idő és méret összehasonlítása alapján azonosítsa az azonos fájlokat.</target>
@@ -1639,12 +1768,33 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Percentage</source>
<target>Százalék</target>
+<source>Failed to retrieve update information.</source>
+<target>Nem sikerült letölteni a frissítési információt.</target>
+
+<source>Automatic updates:</source>
+<target>Automatikus frissítések:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>A FreeFileSync támogatói kiadása szükséges</target>
+
<source>Check for Program Updates</source>
<target>Program-frissítések ellenőrzése</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Frissítse automatikusan most, vagy letölti külön a FreeFileSync honlapjáról?</target>
+
+<source>&Auto-update</source>
+<target>&Automatikus frissítés</target>
+
+<source>&Home page</source>
+<target>&Honlap</target>
+
<source>Download now?</source>
<target>Letöltsem most?</target>
+<source>&Download</source>
+<target>&Letölt</target>
+
<source>FreeFileSync is up to date.</source>
<target>A FreeFileSync naprakész.</target>
@@ -1657,14 +1807,20 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Consistency check failed for %x.</source>
<target>%x konzisztencia ellenőrzése sikertelen.</target>
-<source>Cannot find system function %x.</source>
-<target>%x rendszerfunkció nem elérhető.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>A telepítés más operációs rendszeren volt regisztrálva.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Nem sikerült aktiválni a FreeFileSync Támogatói kiadását.</target>
+
+<source>Incorrect activation key.</source>
+<target>Nem megfelelő aktiváló kulcs.</target>
<source>Unable to register to receive system messages.</source>
-<target>Nem tud regisztrálni hogy megkapja a rendszerüzeneteket.</target>
+<target>Nem tud regisztrálni, hogy megkapja a rendszerüzeneteket.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>A telepítő fájlok sérültek. Installálja újra a FreeFileSync-et.</target>
+<source>Cannot find system function %x.</source>
+<target>%x rendszerfunkció nem elérhető.</target>
<source>Unable to register device notifications for %x.</source>
<target>%x-hez nem lehet eszköz-értesítéseket regisztrálni.</target>
@@ -1696,9 +1852,6 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Cannot copy attributes from %x to %y.</source>
<target>Az attribútumok nem másolhatók %x-ből %y-ba.</target>
-<source>Type of item %x is not supported:</source>
-<target>%x elem típusa nem támogatott:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>%x konfigurációs fájl nem teljes. A hiányzó elemeket az alapértelmezés szerinti értékekkel helyettesíti.</target>
-<source>Internet access failed.</source>
-<target>Meghiúsult az internet hozzáférés.</target>
-
<source>Prepare installation</source>
<target>Telepítés előkészítése</target>
@@ -1822,18 +1972,12 @@ Ez garantálja a konzisztens állapotot egy komoly hiba esetén is.
<source>Edit with FreeFileSync</source>
<target>Szerkesztés FreeFileSync-kel</target>
-<source>Thanks for your donation and support!</source>
-<target>Köszönöm az adományt és támogatást!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ez az adományozók számára biztosított FreeFileSync telepítő elérte a napi telepítési határát.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Letöltsem most az általános verziót a FreeFileSync honlapjáról?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>A hordozható verziót nem lehet a kiválasztott könyvtárba telepíteni.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Válassza a helyi telepítési módot vagy válasszon másik könytárat a telepítéshez.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>A csendes telepítési mód csak a FreeFileSync támogatói kiadásában elérhető.</target>
+
diff --git a/FreeFileSync/Build/Languages/italian.lng b/FreeFileSync/Build/Languages/italian.lng
index 21d70729..4515dd40 100755
--- a/FreeFileSync/Build/Languages/italian.lng
+++ b/FreeFileSync/Build/Languages/italian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Imposta le direzioni di sincronizzazione predefinite: i vecchi file saranno sovrascritti dai nuovi.</target>
-<source>Creating folder %x</source>
-<target>Creazione cartella %x</target>
-
<source>Creating file %x</source>
<target>Creazione file %x</target>
+<source>Creating folder %x</source>
+<target>Creazione cartella %x</target>
+
<source>Creating symbolic link %x</source>
<target>Creazione collegamento %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Se questo errore viene ignorato le cartelle saranno considerate vuote. Cartelle mancanti vengono create automaticamente quando necessario.</target>
-<source>A folder input field is empty.</source>
-<target>Un campo di input cartella è vuoto.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>La cartella corrispondente sarà considerata come vuota.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>I seguenti percorsi delle cartelle sono dipendenti gli uni dagli altri:</target>
-
<source>File %x has an invalid date.</source>
<target>Il file %x ha una data non valida.</target>
<source>Date:</source>
<target>Data:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>I file %x hanno la stessa data ma dimensione diversa.</target>
+<source>Files have the same date but a different size.</source>
+<target>I file hanno la stessa data, ma una dimensione diversa.</target>
<source>Size:</source>
<target>Dimensione:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Confronto contenuto è stato saltato per i file esclusi %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Il confronto del contenuto è stato saltato per i file esclusi.</target>
<source>Items differ in attributes only</source>
<target>Gli oggetti differiscono solo negli attributi</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Inizio confronto</target>
+<source>A folder input field is empty.</source>
+<target>Un campo di input cartella è vuoto.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>La cartella corrispondente sarà considerata come vuota.</target>
+
+<source>Exclude:</source>
+<target>Escludi:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Una cartella di base di una coppia di cartelle è contenuta nell'altra.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>La cartella deve essere esclusa dalla sincronizzazione tramite filtro.</target>
+
<source>Calculating sync directions...</source>
<target>Calcolo della direzione di sincronizzazione...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Aggiorna attributi a destra</target>
-<source>Cannot write permissions of %x.</source>
-<target>Impossibile scrivere i permessi di %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operazione non supportata per i diversi tipi di cartelle di base.</target>
-
<source>Cannot write file %x.</source>
<target>Impossibile scrivere il file %x.</target>
@@ -267,39 +267,45 @@ Previsto: %x byte
Attuale: %y byte
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Impossibile scrivere i permessi di %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operazione non supportata per i diversi tipi di cartelle di base.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Impossibile copiare collegamento %x per %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Impossibile spostare il file %x in %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Impossibile enumerare la cartella %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Impossibile connettersi a %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Impossibile leggere gli attributi del file %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Impossibile ottenere informazioni sul server %x.</target>
-<source>Cannot find %x.</source>
-<target>Impossibile trovare %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Impossibile aprire la cartella %x.</target>
-<source>Cannot open file %x.</source>
-<target>Impossibile aprire il file %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Impossibile leggere la directory %x.</target>
<source>Cannot read file %x.</source>
<target>Impossibile leggere il file %x.</target>
-<source>Cannot find device %x.</source>
-<target>Impossibile trovare dispositivo %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Impossibile leggere gli attributi del file %x.</target>
<source>Cannot create directory %x.</source>
<target>Impossibile creare la cartella %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Impossibile eliminare la directory %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Impossibile eliminare il file %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Impossibile eliminare la directory %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Impossibile scrivere data e ora di modifica di %x.</target>
@@ -309,23 +315,65 @@ Attuale: %y byte
<source>Cannot resolve symbolic link %x.</source>
<target>Impossibile risolvere collegamento %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Impossibile aprire la cartella %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Impossibile spostare %x nel cestino.</target>
+
+<source>Cannot open file %x.</source>
+<target>Impossibile aprire il file %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Impossibile trovare dispositivo %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Impossibile trovare %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Il tipo di oggetto %x non è supportato:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Impossibile eliminare collegamento %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Impossibile determinare lo spazio libero su disco per %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Impossibile spostare %x nel cestino.</target>
-
<source>Incorrect command line:</source>
<target>Linea di comando non corretta:</target>
-<source>Error Code %x:</source>
-<target>Codice Errore %x:</target>
+<source>Error Code %x</source>
+<target>Codice di errore %x</target>
-<source>Unable to connect to %x.</source>
-<target>Impossibile connettersi a %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Il server non supporta l'autenticazione tramite %x.</target>
+
+<source>Required:</source>
+<target>Richiesto:</target>
+
+<source>Unable to access %x.</source>
+<target>Impossibile accedere %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Funzionamento dopo 1 secondo.</pluralform>
+<pluralform>Funzionamento dopo %x secondi.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Aspettare per non più di 1 connessione alla volta.</pluralform>
+<pluralform>Aspettare per non più di %x connessioni alla volta.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Connessioni attive: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Impossibile aprire canale SFTP numero %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Attuale: %y byte
<source>Database file %x does not yet exist.</source>
<target>Il file del database %x non è ancora stato creato.</target>
-<source>Database file is corrupt:</source>
-<target>Il file del database è corrotto:</target>
+<source>Database file is corrupted:</source>
+<target>Il file del database è danneggiato:</target>
-<source>Database files do not share a common session.</source>
-<target>I file del database non condividono una sessione comune.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>I file del database non contengono ancora informazioni sull'ultima sincronizzazione.</target>
+
+<source>Loading file %x...</source>
+<target>Caricamento file %x...</target>
+
+<source>Saving file %x...</source>
+<target>Salvare il file %x...</target>
<source>Searching for folder %x...</source>
<target>Ricerca della cartella %x...</target>
@@ -390,9 +444,6 @@ Attuale: %y byte
<source>Detecting abandoned lock...</source>
<target>Rilevamento blocco abbandonato ...</target>
-<source>Saving file %x...</source>
-<target>Salvare il file %x...</target>
-
<source>Items processed:</source>
<target>Oggetti processati:</target>
@@ -647,14 +698,23 @@ Il comando è attivato se:
<source>Not enough free disk space available in:</source>
<target>Spazio libero su disco insufficiente in:</target>
-<source>Required:</source>
-<target>Richiesto:</target>
-
<source>Available:</source>
<target>Disponibile:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Diverse coppie di cartelle scrivono in una sottocartella comune. Si prega di rivedere la configurazione.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Alcuni file saranno sincronizzati come parte di più cartelle base.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Per evitare conflitti, il set up esclude i filtri in modo che ciascun file aggiornato è considerato da una sola cartella base.</target>
+
+<source>Versioning folder:</source>
+<target>Cartella versione:</target>
+
+<source>Base folder:</source>
+<target>Cartella base:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>La cartella delle versioni sarà sincronizzata poiché è contenuta in una cartella base.</target>
<source>Synchronizing folder pair:</source>
<target>Sincronizzazione della coppia di cartelle:</target>
@@ -662,6 +722,9 @@ Il comando è attivato se:
<source>Generating database...</source>
<target>Generazione database...</target>
+<source>Loading...</source>
+<target>Caricamento...</target>
+
<source>job name</source>
<target>nome del lavoro</target>
@@ -785,15 +848,6 @@ Il comando è attivato se:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Si prega di selezionare una cartella su un file system locale, di rete o un dispositivo MTP.</target>
-<source>SFTP folder</source>
-<target>Cartella SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Selezionare la cartella SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Selezionare tipo di cartella alternativa</target>
-
<source>&New</source>
<target>&Nuovo</target>
@@ -839,11 +893,8 @@ Il comando è attivato se:
<source>&Tools</source>
<target>&Strumenti</target>
-<source>&Check for new version</source>
-<target>&Controlla nuova versione</target>
-
-<source>&Check now</source>
-<target>&Controlla ora</target>
+<source>&Check for updates now</source>
+<target>&Controlla aggiornamenti ora</target>
<source>Check &automatically once a week</source>
<target>Controlla &automaticamente una volta a settimana</target>
@@ -863,6 +914,9 @@ Il comando è attivato se:
<source>Remove folder pair</source>
<target>Elimina la coppia di cartelle</target>
+<source>Access online storage</source>
+<target>Accesso all'archiviazione online</target>
+
<source>Swap sides</source>
<target>Inverti i lati</target>
@@ -950,9 +1004,6 @@ Il comando è attivato se:
<source>Include:</source>
<target>Includi:</target>
-<source>Exclude:</source>
-<target>Escludi:</target>
-
<source>Show examples</source>
<target>Mostra esempi</target>
@@ -1036,8 +1087,11 @@ Il comando è attivato se:
<source>Arrange folder pair</source>
<target>Disporre coppia di cartelle</target>
-<source>Enter your SFTP login details:</source>
-<target>Inserisci i tuoi dati d'accesso SFTP:</target>
+<source>Enter your login details:</source>
+<target>Inserisci i tuoi dati d'accesso:</target>
+
+<source>Connection type:</source>
+<target>Tipo di connessione:</target>
<source>Server name or IP address:</source>
<target>Nome server o indirizzo IP:</target>
@@ -1045,11 +1099,29 @@ Il comando è attivato se:
<source>Port:</source>
<target>Porta:</target>
+<source>Encryption:</source>
+<target>Crittografia:</target>
+
+<source>&Disabled</source>
+<target>&Disabilitato</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicito SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Autenticazione:</target>
+
+<source>&Password</source>
+<target>&Parola d'ordine</target>
+
+<source>&Key file</source>
+<target>File di &chiave</target>
+
<source>User name:</source>
<target>Nome utente:</target>
-<source>Password:</source>
-<target>Password:</target>
+<source>Private key file:</source>
+<target>File della chiave privata:</target>
<source>&Show password</source>
<target>&Mostra password</target>
@@ -1057,6 +1129,27 @@ Il comando è attivato se:
<source>Directory on server:</source>
<target>Directory su server:</target>
+<source>Performance improvements:</source>
+<target>Miglioramenti delle prestazioni:</target>
+
+<source>How to get best performance?</source>
+<target>Come ottenere le migliori prestazioni?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Connessioni SSH per la lettura di directory:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Intervallo suggerito: [1-10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Canali SFTP per il collegamento:</target>
+
+<source>Detect server limit</source>
+<target>Rilevare limite del server</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 collegamenti x 10 canali = 20 volte più veloce la lettura della directory</target>
+
<source>Select a directory on the server:</source>
<target>Selezionare una directory sul server:</target>
@@ -1186,6 +1279,9 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Source code written in C++ using:</source>
<target>Codice sorgente scritto in C++ utilizzando:</target>
+<source>Donation details</source>
+<target>dettagli Donazione</target>
+
<source>If you like FreeFileSync:</source>
<target>Se ti piace FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Feedback and suggestions are welcome</source>
<target>Ogni commento o suggerimento è ben accetto</target>
-<source>Homepage</source>
-<target>Homepage</target>
+<source>Home page</source>
+<target>Pagina Iniziale</target>
<source>Email</source>
<target>Email</target>
@@ -1207,8 +1303,26 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Many thanks for localization:</source>
<target>Ringraziamenti per la traduzione:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protocollo di trasferimento SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Attivare la FreeFileSync Donazione con uno dei seguenti metodi:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Attivare via internet ora:</target>
+
+<source>Activate online</source>
+<target>Attivazione on-line</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Recuperare una chiave di attivazione non in linea dal seguente URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copia negli appunti</target>
+
+<source>Enter activation key:</source>
+<target>Inserisci chiave di attivazione:</target>
+
+<source>Activate offline</source>
+<target>Attiva offline</target>
<source>Save as Batch Job</source>
<target>Salva come Processo Batch</target>
@@ -1225,6 +1339,9 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Select Time Span</source>
<target>Selezionare Intervallo di Tempo</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Opzioni</target>
@@ -1246,8 +1363,8 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Overview</source>
<target>Anteprima</target>
-<source>&Download</source>
-<target>&Scaricare</target>
+<source>&Show details</source>
+<target>&Mostra dettagli</target>
<source>A new version of FreeFileSync is available:</source>
<target>E' disponibile una nuova versione di FreeFileSync:</target>
@@ -1486,8 +1603,17 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Caricamento...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>I file di installazione sono danneggiati. Si prega di reinstallare FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Grazie, %x, per la vostra donazione e il supporto!</target>
+
+<source>Password:</source>
+<target>Password:</target>
+
+<source>Key password:</source>
+<target>Chiave password:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>&Show</source>
<target>&Mostra</target>
+<source>Downloading update...</source>
+<target>Download aggiornamento...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identificare i file uguali confrontando data di modifica e dimensione.</target>
@@ -1639,12 +1768,33 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Percentage</source>
<target>Percentuale</target>
+<source>Failed to retrieve update information.</source>
+<target>Impossibile recuperare le informazioni di aggiornamento.</target>
+
+<source>Automatic updates:</source>
+<target>Aggiornamenti automatici:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Richiede FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Controlla Aggiornamenti del Programma</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Aggiornamento automatico ora o scaricare manualmente dalla home page FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Aggiornamento automatico</target>
+
+<source>&Home page</source>
+<target>&Home page</target>
+
<source>Download now?</source>
<target>Scaricarla ora?</target>
+<source>&Download</source>
+<target>&Scaricare</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync è aggiornato.</target>
@@ -1657,14 +1807,20 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Consistency check failed for %x.</source>
<target>Verifica della coerenza non riuscita per %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Impossibile trovare la funzione di sistema %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>L'installazione è stata registrata su un sistema operativo diverso.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Impossibile attivare FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Chiave di attivazione non corretta.</target>
<source>Unable to register to receive system messages.</source>
<target>Impossibile registrarsi per ricevere i messaggi di sistema.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>I file di installazione sono corrotti. Si prega di reinstallare FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Impossibile trovare la funzione di sistema %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Impossibile registrare le notifiche di dispositivo per %x.</target>
@@ -1696,9 +1852,6 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Cannot copy attributes from %x to %y.</source>
<target>Non è possibile copiare gli attributi da %x per %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Il tipo di oggetto %x non è supportato:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>File di configurazione %x incompleta. Gli elementi mancanti saranno impostati sui valori predefiniti.</target>
-<source>Internet access failed.</source>
-<target>L'accesso a Internet non è riuscito.</target>
-
<source>Prepare installation</source>
<target>Preparare l'installazione</target>
@@ -1822,18 +1972,12 @@ Questo garantisce uno stato consistente anche in caso di errore grave.
<source>Edit with FreeFileSync</source>
<target>Modifica con FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Grazie per la vostra donazione e il supporto!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Questo installatore di FreeFileSync per donatori ha raggiunto il suo limite giornaliero di installazioni.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Scarica la versione regolare dalla homepage di FreeFileSync ora?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Non è possibile installare nella cartella selezionata la versione portatile.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Scegliere il tipo di installazione locale o selezionare una cartella diversa per l'installazione.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>La modalità di installazione silenziosa è disponibile solo nella FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/japanese.lng b/FreeFileSync/Build/Languages/japanese.lng
index 27e2cb46..70e61192 100755
--- a/FreeFileSync/Build/Languages/japanese.lng
+++ b/FreeFileSync/Build/Languages/japanese.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>同期方向のデフォルト設定: 古いファイルに新しいファイルを上書き.</target>
-<source>Creating folder %x</source>
-<target>フォルダ %x を作成中</target>
-
<source>Creating file %x</source>
<target>ファイル %x を作成中</target>
+<source>Creating folder %x</source>
+<target>フォルダ %x を作成中</target>
+
<source>Creating symbolic link %x</source>
<target>シンボリックリンク %x を作成中</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>このエラーを無視した場合、空のフォルダが考慮され、必要に応じて不足しているフォルダが自動的に生成されます.</target>
-<source>A folder input field is empty.</source>
-<target>フォルダ入力欄が空白です.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>対応するフォルダは空であるとみなされます.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>以下のフォルダパスは互いに依存関係にあります:</target>
-
<source>File %x has an invalid date.</source>
<target>ファイル %x の日付は無効なものです.</target>
<source>Date:</source>
<target>日時:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>ファイル %x は、同じ時間ですがサイズが異なっています.</target>
+<source>Files have the same date but a different size.</source>
+<target>日時は同じでサイズが異なるファイル.</target>
<source>Size:</source>
<target>サイズ:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>除外されたファイル %x の内容の比較をスキップ.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>除外ファイルにより比較をスキップされた内容.</target>
<source>Items differ in attributes only</source>
<target>属性のみ異なる項目</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>比較処理を開始中</target>
+<source>A folder input field is empty.</source>
+<target>フォルダ入力欄が空白です.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>対応するフォルダは空であるとみなされます.</target>
+
+<source>Exclude:</source>
+<target>除外:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>フォルダ ペアの一方の基準フォルダがもう一方に含まれています.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>このフォルダはフィルターで同期から除外する必要があります.</target>
+
<source>Calculating sync directions...</source>
<target>同期方向を計算しています...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>右の属性を更新</target>
-<source>Cannot write permissions of %x.</source>
-<target>%x のパーミッションを書き込めません.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>別の基準フォルダタイプでは対応していない操作.</target>
-
<source>Cannot write file %x.</source>
<target>ファイル %x に書き込めません.</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
実際の値: %y バイト
</target>
+<source>Cannot write permissions of %x.</source>
+<target>%x のパーミッションを書き込めません.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>別の基準フォルダタイプでは対応していない操作.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>シンボリックリンク %x を %y にコピーできません.</target>
<source>Cannot move file %x to %y.</source>
<target>ファイル %x を %y に移動できません.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>ディレクトリ %x を列挙できません.</target>
+<source>Unable to connect to %x.</source>
+<target>%x に接続できません.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>%x のファイル属性を読み込めません.</target>
+<source>Failed to get information about server %x.</source>
+<target>%x サーバからの情報取得に失敗しました.</target>
-<source>Cannot find %x.</source>
-<target>%x がみつかりません.</target>
+<source>Cannot open directory %x.</source>
+<target>ディレクトリ %x を開けません.</target>
-<source>Cannot open file %x.</source>
-<target>ファイル %x を開けません.</target>
+<source>Cannot read directory %x.</source>
+<target>ディレクトリ %x を読み取れません.</target>
<source>Cannot read file %x.</source>
<target>ファイル %x を読み込めません.</target>
-<source>Cannot find device %x.</source>
-<target>デバイス %x がみつかりません.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>%x のファイル属性を読み込めません.</target>
<source>Cannot create directory %x.</source>
<target>ディレクトリ %x を作成できません.</target>
-<source>Cannot delete directory %x.</source>
-<target>ディレクトリ %x を削除できません.</target>
-
<source>Cannot delete file %x.</source>
<target>ファイル %x を削除出来ません.</target>
+<source>Cannot delete directory %x.</source>
+<target>ディレクトリ %x を削除できません.</target>
+
<source>Cannot write modification time of %x.</source>
<target>%x の更新時刻を書き込めませんでした.</target>
@@ -309,23 +315,63 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>シンボリックリンク %x を解決できません.</target>
-<source>Cannot open directory %x.</source>
-<target>ディレクトリ %x を開けません.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x をゴミ箱に移動できません.</target>
+
+<source>Cannot open file %x.</source>
+<target>ファイル %x を開けません.</target>
+
+<source>Cannot find device %x.</source>
+<target>デバイス %x がみつかりません.</target>
+
+<source>Cannot find %x.</source>
+<target>%x がみつかりません.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>項目 %x には対応していません:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>シンボリック リンク %x を削除できません.</target>
<source>Cannot determine free disk space for %x.</source>
<target>%x の空きディスク領域を検出できません.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x をゴミ箱に移動できません.</target>
-
<source>Incorrect command line:</source>
<target>不正なコマンドライン:</target>
-<source>Error Code %x:</source>
-<target>エラーコード %x:</target>
+<source>Error Code %x</source>
+<target>エラーコード %x.</target>
-<source>Unable to connect to %x.</source>
-<target>%x に接続できません.</target>
+<source>The server does not support authentication via %x.</source>
+<target>このサーバは %x による認証に対応していません.</target>
+
+<source>Required:</source>
+<target>必須:</target>
+
+<source>Unable to access %x.</source>
+<target>%x にアクセスできません.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>%x 秒経過で操作をタイムアウト.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>一度に %x 以上の接続を行うことはできません.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>アクティブな接続: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>SFTP チャンネル %x を開けません.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -356,11 +402,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>データベース %x は存在しません.</target>
-<source>Database file is corrupt:</source>
-<target>破損しているデータベース:</target>
+<source>Database file is corrupted:</source>
+<target>データベースが破損しています:</target>
-<source>Database files do not share a common session.</source>
-<target>データベースは一般セッションで共有できません.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>このデータベース ファイルには前回の同期に関する情報がまだ含まれていません.</target>
+
+<source>Loading file %x...</source>
+<target>ファイル %x を読み込み中...</target>
+
+<source>Saving file %x...</source>
+<target>ファイル %x を保存中...</target>
<source>Searching for folder %x...</source>
<target>フォルダ %x を検索中...</target>
@@ -388,9 +440,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>放棄されたロックを検出中...</target>
-<source>Saving file %x...</source>
-<target>ファイル %x を保存中...</target>
-
<source>Items processed:</source>
<target>処理された要素:</target>
@@ -644,14 +693,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>利用可能なディスク空き容量が足りません:</target>
-<source>Required:</source>
-<target>必須:</target>
-
<source>Available:</source>
<target>利用可能:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>共通サブフォルダに複数フォルダペアの書き込みがあります。構成を確認してください.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>いくつかのファイルは複数の基準フォルダの一部として同期されます.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>競合を避けたい場合は、各ファイルがひとつの基準フォルダで更新されるように除外フィルターをセットします.</target>
+
+<source>Versioning folder:</source>
+<target>バージョン管理フォルダ:</target>
+
+<source>Base folder:</source>
+<target>基準フォルダ:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>このバージョン管理フォルダは、基準フォルダに含まれるため同期の対象となります.</target>
<source>Synchronizing folder pair:</source>
<target>フォルダペアを同期処理:</target>
@@ -659,6 +717,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>データベースを作成中...</target>
+<source>Loading...</source>
+<target>読み込み中...</target>
+
<source>job name</source>
<target>ジョブ名</target>
@@ -781,15 +842,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>ローカルファイルシステム、ネットワークまたは MTP デバイス上のフォルダを選択.</target>
-<source>SFTP folder</source>
-<target>SFTP フォルダ</target>
-
-<source>Select SFTP folder</source>
-<target>SFTPフォルダを選択</target>
-
-<source>Select alternative folder type</source>
-<target>代替フォルダ タイプを選択</target>
-
<source>&New</source>
<target>新規(&N)</target>
@@ -835,11 +887,8 @@ The command is triggered if:
<source>&Tools</source>
<target>ツール(&T)</target>
-<source>&Check for new version</source>
-<target>新バージョンの確認(&C)</target>
-
-<source>&Check now</source>
-<target>今すぐ確認(&C)</target>
+<source>&Check for updates now</source>
+<target>今すぐ更新を確認(&C)</target>
<source>Check &automatically once a week</source>
<target>週に一回、自動的に確認する(&A)</target>
@@ -859,6 +908,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>フォルダペアを除去</target>
+<source>Access online storage</source>
+<target>オンライン ストレージにアクセス</target>
+
<source>Swap sides</source>
<target>パネルを入れ替え</target>
@@ -946,9 +998,6 @@ The command is triggered if:
<source>Include:</source>
<target>含める:</target>
-<source>Exclude:</source>
-<target>除外:</target>
-
<source>Show examples</source>
<target>入力例を表示</target>
@@ -1032,8 +1081,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>フォルダ ペアの配置</target>
-<source>Enter your SFTP login details:</source>
-<target>SFTP ログインの詳細を入力:</target>
+<source>Enter your login details:</source>
+<target>ログインの詳細を入力:</target>
+
+<source>Connection type:</source>
+<target>接続の種類:</target>
<source>Server name or IP address:</source>
<target>サーバ名、または IP アドレス:</target>
@@ -1041,11 +1093,29 @@ The command is triggered if:
<source>Port:</source>
<target>ポート:</target>
+<source>Encryption:</source>
+<target>暗号化:</target>
+
+<source>&Disabled</source>
+<target>無効化(&D)</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>明示的な SSL/TLS(&E)</target>
+
+<source>Authentication:</source>
+<target>認証方式:</target>
+
+<source>&Password</source>
+<target>パスワード(&P)</target>
+
+<source>&Key file</source>
+<target>キーファイル(&K)</target>
+
<source>User name:</source>
<target>ユーザ名:</target>
-<source>Password:</source>
-<target>パスワード:</target>
+<source>Private key file:</source>
+<target>秘密キーファイル:</target>
<source>&Show password</source>
<target>パスワードを表示(&S)</target>
@@ -1053,6 +1123,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>サーバ上のディレクトリ:</target>
+<source>Performance improvements:</source>
+<target>パフォーマンス向上:</target>
+
+<source>How to get best performance?</source>
+<target>最適なパフォーマンスとは?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>ディレクトリ読み取りのSSH接続:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>推奨される範囲: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>接続当たりの SFTP チャンネル数:</target>
+
+<source>Detect server limit</source>
+<target>サーバ制限の検出</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 接続 x 10 チャンネル = ディレクトリ読み取りが 20 倍高速化</target>
+
<source>Select a directory on the server:</source>
<target>サーバ上のディレクトリを選択:</target>
@@ -1182,6 +1273,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>ソースコードは C++ で書かれています:</target>
+<source>Donation details</source>
+<target>寄付の詳細</target>
+
<source>If you like FreeFileSync:</source>
<target>FreeFileSync を気に入ってくれた方へ:</target>
@@ -1191,8 +1285,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>フィードバック、提案などはこちらから</target>
-<source>Homepage</source>
-<target>ホームページ</target>
+<source>Home page</source>
+<target>ホーム ページ</target>
<source>Email</source>
<target>E-メール</target>
@@ -1203,8 +1297,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>ローカライズのご協力に感謝します:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH ファイル転送プロトコル</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>FreeFileSync 寄付版のアクティベートは次のいずれかの方法で行います:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. ネット経由でアクティベート:</target>
+
+<source>Activate online</source>
+<target>オンライン アクティベート</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. 次のURLからオフライン アクティベーションキーを取得:</target>
+
+<source>&Copy to clipboard</source>
+<target>クリップボードにコピー(&C)</target>
+
+<source>Enter activation key:</source>
+<target>アクティベーションキーの入力:</target>
+
+<source>Activate offline</source>
+<target>オフライン アクティベート</target>
<source>Save as Batch Job</source>
<target>一括ジョブを保存</target>
@@ -1221,6 +1333,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>タイムスパンを選択</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync 寄付版</target>
+
<source>&Options</source>
<target>設定(&O)</target>
@@ -1242,8 +1357,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>概要</target>
-<source>&Download</source>
-<target>ダウンロード(&D)</target>
+<source>&Show details</source>
+<target>詳細表示(&S)</target>
<source>A new version of FreeFileSync is available:</source>
<target>FreeFileSync の新しいバージョンが利用できます:</target>
@@ -1478,8 +1593,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>ログ</target>
-<source>Loading...</source>
-<target>読み込み中...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>インストール ファイルが破損しています、FreeFileSync を再インストールしてください.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>ありがとう %x, あなたの寄付と支援に感謝します!!</target>
+
+<source>Password:</source>
+<target>パスワード:</target>
+
+<source>Key password:</source>
+<target>キーパスワード:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1535,6 +1659,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>表示(&S)</target>
+<source>Downloading update...</source>
+<target>アップデートをダウンロード中...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>更新時刻とサイズを比較して、同一ファイルを識別します.</target>
@@ -1628,12 +1755,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>パーセント</target>
+<source>Failed to retrieve update information.</source>
+<target>更新情報の取得に失敗.</target>
+
+<source>Automatic updates:</source>
+<target>自動アップデート:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>FreeFileSync 寄付版が必要です</target>
+
<source>Check for Program Updates</source>
<target>プログラムのアップデートを確認</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>今すぐ自動更新、または FreeFileSync 公式サイトから手動でダウンロードしますか?</target>
+
+<source>&Auto-update</source>
+<target>自動更新(&A)</target>
+
+<source>&Home page</source>
+<target>ホームページ(&H)</target>
+
<source>Download now?</source>
<target>ダウンロードしますか?</target>
+<source>&Download</source>
+<target>ダウンロード(&D)</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync は最新です.</target>
@@ -1646,14 +1794,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>%x の整合性チェックに失敗.</target>
-<source>Cannot find system function %x.</source>
-<target>システム関数 %x がみつかりません.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>インストールは別の OS に登録されています.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>FreeFileSync 寄付版のアクティベートに失敗.</target>
+
+<source>Incorrect activation key.</source>
+<target>キーに誤りがあります.</target>
<source>Unable to register to receive system messages.</source>
<target>システム受信メッセージに登録できません.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>ファイルが破損しています、FreeFileSync を再インストールしてください.</target>
+<source>Cannot find system function %x.</source>
+<target>システム関数 %x がみつかりません.</target>
<source>Unable to register device notifications for %x.</source>
<target>%x のデバイス通知を登録できません.</target>
@@ -1685,9 +1839,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>属性 を %x から %y にコピーできません.</target>
-<source>Type of item %x is not supported:</source>
-<target>項目 %x には対応していません:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1736,9 +1887,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>構成設定ファイル %x は不完全です。存在しない要素が既定値としてセットされています.</target>
-<source>Internet access failed.</source>
-<target>インターネットのアクセスに失敗.</target>
-
<source>Prepare installation</source>
<target>インストールの準備</target>
@@ -1808,18 +1956,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>FreeFileSync で編集</target>
-<source>Thanks for your donation and support!</source>
-<target>あなたの寄付と支援に感謝します!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>この FreeFileSync インストーラは日付の制限に達しています.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>FreeFileSync の標準版を今ホームページからダウンロードしますか?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>選択したフォルダにはポータブル版をインストールできません.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>ローカル インストールを選択するか、別のインストール先を選択してください.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>サイレント インストール モードは、FreeFileSync 寄付版でのみ使用できます.</target>
+
diff --git a/FreeFileSync/Build/Languages/korean.lng b/FreeFileSync/Build/Languages/korean.lng
index 1ef3b60f..aa9d6a9b 100755
--- a/FreeFileSync/Build/Languages/korean.lng
+++ b/FreeFileSync/Build/Languages/korean.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>기본값 동기화 방향 설정: 이전 파일들은 보다 최신 파일들로 덮어 쓰여집니다.</target>
-<source>Creating folder %x</source>
-<target>폴더 %x 생성 중</target>
-
<source>Creating file %x</source>
<target>파일 %x 생성 중</target>
+<source>Creating folder %x</source>
+<target>폴더 %x 생성 중</target>
+
<source>Creating symbolic link %x</source>
<target>심볼릭 링크 %x 생성 중</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>이 오류를 무시하면 폴더는 비어 있는 것으로 간주됩니다. 없는 폴더는 필요한 경우 자동 생성됩니다.</target>
-<source>A folder input field is empty.</source>
-<target>폴더 입력 필드 하나가 비어 있습니다.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>해당 폴더를 비어 있는 상태로 간주합니다.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>다음 폴더 경로들은 상호 의존 관계에 있습니다:</target>
-
<source>File %x has an invalid date.</source>
<target>파일 %x 의 날짜가 유효하지 않습니다.</target>
<source>Date:</source>
<target>날짜:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>파일 %x 의 날짜는 같으나, 크기가 다릅니다.</target>
+<source>Files have the same date but a different size.</source>
+<target>파일의 날짜는 같으나, 크기가 다릅니다.</target>
<source>Size:</source>
<target>크기:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>제외 파일 %x에 대한 내용 비교는 건너 뛰었습니다.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>제외된 파일에 대한 내용 비교는 건너 뛰었습니다.</target>
<source>Items differ in attributes only</source>
<target>항목들이 속성에서만 차이가 있습니다.</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>비교 시작</target>
+<source>A folder input field is empty.</source>
+<target>폴더 입력 필드 하나가 비어 있습니다.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>해당 폴더를 비어 있는 상태로 간주합니다.</target>
+
+<source>Exclude:</source>
+<target>제외:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>폴더 페어 중 하나의 기본 폴더가 다른 폴더에 포함돼 있습니다.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>해당 폴더는 필터를 통한 동기화에서 제외시켜야 합니다.</target>
+
<source>Calculating sync directions...</source>
<target>동기화 방향을 계산 중...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>우측 속성 업데이트</target>
-<source>Cannot write permissions of %x.</source>
-<target>%x의 권한을 쓸 수 없습니다.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>다른 기본 폴더 유형에 대해 지원되지 않는 동작.</target>
-
<source>Cannot write file %x.</source>
<target>파일 %x을(를) 쓸 수 없습니다.</target>
@@ -267,6 +267,12 @@ Actual: %y bytes
실제 사이즈: %y 바이트
</target>
+<source>Cannot write permissions of %x.</source>
+<target>%x의 권한을 쓸 수 없습니다.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>다른 기본 폴더 유형에 대해 지원되지 않는 동작입니다.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>심볼릭 링크 %x을(를) %y(으)로 복사할 수 없습니다.</target>
@@ -276,36 +282,30 @@ Actual: %y bytes
<source>Unable to connect to %x.</source>
<target>%x에 연결할 수 없습니다.</target>
+<source>Failed to get information about server %x.</source>
+<target>서버 %x에 대한 정보를 가져 오는데 실패했습니다.</target>
+
<source>Cannot open directory %x.</source>
<target>디렉토리 %x을(를) 열 수 없습니다.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>디렉토리 %x을(를) 열거할 수 없습니다.</target>
+<source>Cannot read directory %x.</source>
+<target>디렉토리 %x을(를) 읽을 수 없습니다.</target>
<source>Cannot read file attributes of %x.</source>
<target>%x의 파일 속성을 읽을 수 없습니다.</target>
-<source>Cannot find %x.</source>
-<target>%x을(를) 찾을 수 없습니다.</target>
-
-<source>Cannot open file %x.</source>
-<target>파일 %x을(를) 열 수 없습니다.</target>
-
<source>Cannot read file %x.</source>
<target>파일 %x을(를) 읽을 수 없습니다.</target>
-<source>Cannot find device %x.</source>
-<target>장치 %x을(를) 찾을 수 없습니다.</target>
-
<source>Cannot create directory %x.</source>
<target>디렉토리 %x을(를) 생성할 수 없습니다.</target>
-<source>Cannot delete directory %x.</source>
-<target>디렉토리 %x을(를) 삭제할 수 없습니다.</target>
-
<source>Cannot delete file %x.</source>
<target>파일 %x을(를) 삭제할 수 없습니다.</target>
+<source>Cannot delete directory %x.</source>
+<target>디렉토리 %x을(를) 삭제할 수 없습니다.</target>
+
<source>Cannot write modification time of %x.</source>
<target>%x의 수정 시간을 쓸 수 없습니다.</target>
@@ -315,15 +315,64 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>심볼릭 링크 %x을(를) 해결할 수 없습니다.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>%x에 대한 사용 가능한 디스크 공간을 확인할 수 없습니다.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>휴지통으로 %x을(를) 이동할 수 없습니다.</target>
+<source>Cannot open file %x.</source>
+<target>파일 %x을(를) 열 수 없습니다.</target>
+
+<source>Cannot find device %x.</source>
+<target>장치 %x을(를) 찾을 수 없습니다.</target>
+
+<source>Cannot find %x.</source>
+<target>%x을(를) 찾을 수 없습니다.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>항목 %x의 형식은 지원되지 않습니다:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>심볼릭 링크 %x을(를) 삭제할 수 없습니다.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>%x에 대한 사용 가능한 디스크 공간을 확인할 수 없습니다.</target>
+
<source>Incorrect command line:</source>
<target>부정확한 명령줄:</target>
+<source>Error Code %x</source>
+<target>오류 코드 %x</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>서버가 %x을(를) 통한 인증을 지원하지 않습니다.</target>
+
+<source>Required:</source>
+<target>필요 공간(크기):</target>
+
+<source>Unable to access %x.</source>
+<target>%x에 접근할 수 없습니다.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>%x초 이후 작업시간 초과됨.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>한꺼번에 %x개 이상의 연결에 대기할 수 없습니다.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>활성화된 연결: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>SFTP 채널번호 %x을(를) 열지 못 했습니다.</target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -353,11 +402,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>데이터베이스 파일 %x 은(는) 아직 존재하지 않습니다.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>데이터베이스 파일 손상:</target>
-<source>Database files do not share a common session.</source>
-<target>데이터베이스 파일이 일반/공동 세션을 공유하지 않습니다.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>데이터베이스 파일에 아직 마지막 동기화에 대한 정보가 없습니다.</target>
+
+<source>Loading file %x...</source>
+<target>파일 %x 로딩 중...</target>
+
+<source>Saving file %x...</source>
+<target>파일 %x 저장 중...</target>
<source>Searching for folder %x...</source>
<target>폴더 %x 검색 중...</target>
@@ -385,9 +440,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>방치된 잠금 탐색 중...</target>
-<source>Saving file %x...</source>
-<target>파일 %x 저장 중...</target>
-
<source>Items processed:</source>
<target>처리된 항목:</target>
@@ -445,7 +497,7 @@ Actual: %y bytes
<target>사용자에 의한 작업 중단: 현재 작업 종료 대기 중...</target>
<source>Unable to create time stamp for versioning:</source>
-<target>버저닝을 위한 타임 스탬프 생성 불가:</target>
+<target>버전 관리를 위한 타임 스탬프 생성 불가:</target>
<source>Drag && drop</source>
<target>드래그 앤 드랍(&&) [마우스로 파일 끌어다 놓기]</target>
@@ -641,14 +693,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>사용 가능한 디스크 여유 공간이 부족합니다:</target>
-<source>Required:</source>
-<target>필요 공간(크기):</target>
-
<source>Available:</source>
<target>여유 공간(크기):</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>공통 하위 폴더에 다중 폴더 페어를 기록합니다. 구성을 재검토 하시기 바랍니다.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>일부 파일들은 여러 기본 폴더의 일부로써 동기화됩니다.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>충돌 방지를 위해 제외 필터를 설정하여 업데이트 된 각 파일이 하나의 기본 폴더만으로 간주되도록 하십시오.</target>
+
+<source>Versioning folder:</source>
+<target>버전 관리 폴더:</target>
+
+<source>Base folder:</source>
+<target>기본 폴더:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>버전 관리 폴더는 기본 폴더에 포함되어 있기 때문에 동기화됩니다.</target>
<source>Synchronizing folder pair:</source>
<target>폴더 페어 동기화 진행 중:</target>
@@ -656,6 +717,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>데이터베이스 생성 중...</target>
+<source>Loading...</source>
+<target>로드 중...</target>
+
<source>job name</source>
<target>작업 이름</target>
@@ -778,15 +842,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>로컬 파일 시스템, 네트워크 또는 MTP 장치에서의 폴더 하나를 선택하십시오.</target>
-<source>SFTP folder</source>
-<target>SFTP 폴더</target>
-
-<source>Select SFTP folder</source>
-<target>SFTP 폴더 선택</target>
-
-<source>Select alternative folder type</source>
-<target>다른 폴더 유형 선택</target>
-
<source>&New</source>
<target>새로 만들기(&N)</target>
@@ -832,11 +887,8 @@ The command is triggered if:
<source>&Tools</source>
<target>도구(&T)</target>
-<source>&Check for new version</source>
-<target>신규 버전 확인(&C)</target>
-
-<source>&Check now</source>
-<target>지금 확인(&C)</target>
+<source>&Check for updates now</source>
+<target>업데이트 바로 확인(&C)</target>
<source>Check &automatically once a week</source>
<target>자동으로 주당 1회 확인(&a)</target>
@@ -856,6 +908,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>폴더 페어 제거</target>
+<source>Access online storage</source>
+<target>온라인 저장소 접속</target>
+
<source>Swap sides</source>
<target>양측 위치 바꾸기</target>
@@ -943,9 +998,6 @@ The command is triggered if:
<source>Include:</source>
<target>포함:</target>
-<source>Exclude:</source>
-<target>제외:</target>
-
<source>Show examples</source>
<target>예시 보이기</target>
@@ -1000,7 +1052,7 @@ The command is triggered if:
<target>파일 영구 삭제 또는 덮어쓰기</target>
<source>&Versioning</source>
-<target>버저닝(&V)</target>
+<target>버전 관리(&V)</target>
<source>Move files to a user-defined folder</source>
<target>사용자 정의 폴더로 파일 이동</target>
@@ -1029,8 +1081,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>폴더 페어 정렬</target>
-<source>Enter your SFTP login details:</source>
-<target>귀하의 SFTP 로그인 정보 입력:</target>
+<source>Enter your login details:</source>
+<target>귀하의 로그인 정보 입력:</target>
+
+<source>Connection type:</source>
+<target>연결 유형:</target>
<source>Server name or IP address:</source>
<target>서버 이름 또는 IP 주소:</target>
@@ -1038,11 +1093,29 @@ The command is triggered if:
<source>Port:</source>
<target>포트:</target>
+<source>Encryption:</source>
+<target>암호화:</target>
+
+<source>&Disabled</source>
+<target>비활성화(&D)</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>명확한 SSL/TLS(&E)</target>
+
+<source>Authentication:</source>
+<target>인증:</target>
+
+<source>&Password</source>
+<target>비밀번호(&P)</target>
+
+<source>&Key file</source>
+<target>키 파일(&K)</target>
+
<source>User name:</source>
-<target>사용자 이름:</target>
+<target>사용자 명:</target>
-<source>Password:</source>
-<target>비밀번호:</target>
+<source>Private key file:</source>
+<target>개인 키 파일:</target>
<source>&Show password</source>
<target>비밀번호 표시(&S)</target>
@@ -1050,6 +1123,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>서버 디렉토리:</target>
+<source>Performance improvements:</source>
+<target>성능 향상:</target>
+
+<source>How to get best performance?</source>
+<target>최상의 성능을 얻는 방법은?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>디렉토리 읽기를 위한 SSH 연결:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>권장 범위: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>연결 당 SFTP 채널 수:</target>
+
+<source>Detect server limit</source>
+<target>서버 한계 감지</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 연결 x 10 채널 = 20배 빠른 디렉토리 읽기</target>
+
<source>Select a directory on the server:</source>
<target>서버 디렉토리 선택:</target>
@@ -1179,6 +1273,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>소스코드는 C++ 언어로 아래 툴을 사용하여 작성되었습니다:</target>
+<source>Donation details</source>
+<target>기부 관련 세부정보</target>
+
<source>If you like FreeFileSync:</source>
<target>FreeFileSync를 위한 기부:</target>
@@ -1188,7 +1285,7 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>모든 의견 및 건의/제안을 환영합니다</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>홈페이지</target>
<source>Email</source>
@@ -1200,8 +1297,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>현지화 작업에 깊은 감사 드립니다:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH 파일 전송 프로토콜</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>다음 중 한 방법을 사용하여 FreeFileSync 유료 버전을 활성화하세요:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. 인터넷을 통해 지금 바로 활성화:</target>
+
+<source>Activate online</source>
+<target>온라인 활성화</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. 다음 URL에서 오프라인 활성화 키를 검색:</target>
+
+<source>&Copy to clipboard</source>
+<target>클립보드에 복사(&C)</target>
+
+<source>Enter activation key:</source>
+<target>활성화 키 입력:</target>
+
+<source>Activate offline</source>
+<target>오프라인 활성화</target>
<source>Save as Batch Job</source>
<target>일괄 작업으로 저장</target>
@@ -1218,6 +1333,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>시간간격(타임스팬) 선택</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync 유료 버전</target>
+
<source>&Options</source>
<target>옵션(&O)</target>
@@ -1239,14 +1357,14 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>개요</target>
-<source>&Download</source>
-<target>다운로드(&D)</target>
+<source>&Show details</source>
+<target>세부정보 표시(&S)</target>
<source>A new version of FreeFileSync is available:</source>
-<target>FreeFileSync 신규 버전이 나왔습니다:</target>
+<target>FreeFileSync 신규 버전 출시:</target>
<source>Local path not available for %x.</source>
-<target>%x에 대한 로컬 경로 사용 불가.</target>
+<target>%x에서 로컬 경로를 사용할 수 없습니다.</target>
<source>Confirm</source>
<target>확인</target>
@@ -1475,8 +1593,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>로그</target>
-<source>Loading...</source>
-<target>로드 중...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>설치 파일이 손상되었습니다. FreeFileSync를 다시 설치하십시오.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>%x님의 기부와 지원에 감사드립니다!</target>
+
+<source>Password:</source>
+<target>비밀번호:</target>
+
+<source>Key password:</source>
+<target>키 비밀번호:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1532,6 +1659,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>표시/보이기(&S)</target>
+<source>Downloading update...</source>
+<target>업데이트 다운로드 중...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>수정 시간 및 크기를 비교하여 동일한 파일을 식별합니다.</target>
@@ -1625,12 +1755,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>퍼센티지(%)</target>
+<source>Failed to retrieve update information.</source>
+<target>업데이트 정보 검색에 실패했습니다.</target>
+
+<source>Automatic updates:</source>
+<target>자동 업데이트:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>FreeFileSync 유료 버전이 필요합니다.</target>
+
<source>Check for Program Updates</source>
<target>프로그램 업데이트 확인</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>지금 자동 업데이트 또는 FreeFileSync 홈페이지에서 수동으로 다운로드 하시겠습니까?</target>
+
+<source>&Auto-update</source>
+<target>자동 업데이트(&A)</target>
+
+<source>&Home page</source>
+<target>홈페이지(&H)</target>
+
<source>Download now?</source>
<target>지금 다운로드 하시겠습니까?</target>
+<source>&Download</source>
+<target>다운로드(&D)</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync는 현재 최신버전 상태입니다.</target>
@@ -1643,14 +1794,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>%x에 대한 일관성 검사 실패.</target>
-<source>Cannot find system function %x.</source>
-<target>시스템 함수 %x을(를) 찾을 수 없습니다.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>설치가 다른 운영체제에 등록되었습니다.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>FreeFileSync 유료 버전 활성화에 실패했습니다.</target>
+
+<source>Incorrect activation key.</source>
+<target>잘못된 활성화 키.</target>
<source>Unable to register to receive system messages.</source>
<target>시스템 메시지 수신을 위한 등록을 할 수 없습니다.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>설치 파일이 손상됩니다. FreeFileSync를 다시 설치하십시오.</target>
+<source>Cannot find system function %x.</source>
+<target>시스템 함수 %x을(를) 찾을 수 없습니다.</target>
<source>Unable to register device notifications for %x.</source>
<target>%x에 대한 장치 알림 등록을 할 수 없습니다.</target>
@@ -1682,9 +1839,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>%x에서 %y(으)로의 속성을 복사할 수 없습니다.</target>
-<source>Type of item %x is not supported:</source>
-<target>항목 %x의 형식은 지원되지 않습니다:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1724,9 +1878,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot change process I/O priorities.</source>
<target>프로세스 I/O 우선순위 변경을 할 수 없습니다.</target>
-<source>Error Code %x:</source>
-<target>오류 코드 %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>폴더 %x에 관한 휴지통 실패 확인 중.</target>
@@ -1736,9 +1887,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>구성 파일 %x(이)가 불완전합니다. 누락된 요소는 기본 값으로 설정됩니다.</target>
-<source>Internet access failed.</source>
-<target>인터넷 접속에 실패했습니다.</target>
-
<source>Prepare installation</source>
<target>설치 준비</target>
@@ -1808,18 +1956,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>FreeFileSync로 편집</target>
-<source>Thanks for your donation and support!</source>
-<target>귀하의 기부와 지원에 감사드립니다!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>기부자용 FreeFileSync 인스톨러가 1일 설치한도에 도달했습니다.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>지금 FreeFileSync 홈페이지에서 일반 버전을 다운로드 해 보시겠습니까?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>휴대용 버전은 선택한 폴더에 설치할 수 없습니다.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>로컬 설치 유형을 선택하거나 설치할 다른 폴더를 선택하십시오.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>자동 설치 모드는 FreeFileSync 유료 버전에서만 사용 가능합니다.</target>
+
diff --git a/FreeFileSync/Build/Languages/lithuanian.lng b/FreeFileSync/Build/Languages/lithuanian.lng
index 1ff6c985..e3369b1b 100755
--- a/FreeFileSync/Build/Languages/lithuanian.lng
+++ b/FreeFileSync/Build/Languages/lithuanian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Nustatomos numatytos suvienodinimo kryptys: Seni failai bus perrašyti naujesniais failais.</target>
-<source>Creating folder %x</source>
-<target>Kuriamas aplankas %x</target>
-
<source>Creating file %x</source>
<target>Kuriamas failas %x</target>
+<source>Creating folder %x</source>
+<target>Kuriamas aplankas %x</target>
+
<source>Creating symbolic link %x</source>
<target>Kuriama simbolinė nuoroda %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Jei nebus paisoma šios klaidos, aplankams bus laikomas tusčiu. Trūkstami aplankai sukuriami automatiškai.</target>
-<source>A folder input field is empty.</source>
-<target>Aplanko įvesties laukas yra tuščias.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Atitinkamas aplankas bus laikomas tuščiu.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Sekančios aplankų nuorodos yra priklausomos viena nuo kitos:</target>
-
<source>File %x has an invalid date.</source>
<target>Failas %x turi netinkamą datą.</target>
<source>Date:</source>
<target>Data:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Failai %x turi tokią pačią datą bet skirtingą dydį.</target>
+<source>Files have the same date but a different size.</source>
+<target>Failai turintys tą pačią datą, bet yra skirtingų dydžių.</target>
<source>Size:</source>
<target>Dydis:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Praleistas turinio palyginimas išskirtam failui %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Turinio palyginimas praleido išskirtus failus.</target>
<source>Items differ in attributes only</source>
<target>Elementai skiriasi tik atributais</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Pradedamas palyginimas</target>
+<source>A folder input field is empty.</source>
+<target>Aplanko įvesties laukas yra tuščias.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Atitinkamas aplankas bus laikomas tuščiu.</target>
+
+<source>Exclude:</source>
+<target>Išskirti:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Pagrindinis aplankas yra kitame, aplankų poros, aplanke.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Aplankas turėtų būti išskirtas nuo suvienodinimo filtre.</target>
+
<source>Calculating sync directions...</source>
<target>Apskaičiuojamos suvienodinimo kryptys...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Atnaujinti atributus dešinėje</target>
-<source>Cannot write permissions of %x.</source>
-<target>Nepavyksta įrašyti leidimų %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Veiksmas yra nesuderinamas dėl skirtingų aplankų savybių.</target>
-
<source>Cannot write file %x.</source>
<target>Nepavyksta įrašyti failo %x.</target>
@@ -267,39 +267,45 @@ Numatytas: %x baitai
Esamas: %y baitai
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Nepavyksta įrašyti leidimų %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Veiksmas yra nesuderinamas dėl skirtingų aplankų savybių.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Nepavyko nukopijuoti simbolinės nuorodos %x į %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Nepavyksta perkelti failo %x į %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Nepavyksta sunumeruoti direktorijos %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Nepavyko prisijungti prie %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Nepavyko perskaityti failo %x atributų.</target>
+<source>Failed to get information about server %x.</source>
+<target>Nepavyko gauti informaciją apie serverį %x.</target>
-<source>Cannot find %x.</source>
-<target>Negalima surasti %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Nepavyksta atversti direktorijos %x.</target>
-<source>Cannot open file %x.</source>
-<target>%x failo nepavyko atidaryti.</target>
+<source>Cannot read directory %x.</source>
+<target>Negalima nuskaityti katalogo %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Nepavyko perskaityti failo %x atributų.</target>
<source>Cannot read file %x.</source>
<target>Nepavyksta nuskaityti failo %x.</target>
-<source>Cannot find device %x.</source>
-<target>Negalima surasti įrenginio %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Nepavyksta sukurti katalogo %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Nepavyksta ištrinti katalogo %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Nepavyksta ištrinti failo %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Nepavyksta ištrinti katalogo %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Nepavyksta šrašyti pakeitimo datos %x.</target>
@@ -309,23 +315,67 @@ Esamas: %y baitai
<source>Cannot resolve symbolic link %x.</source>
<target>Nepavyko rasti simbolinės nuorodos %x reikšmės.</target>
-<source>Cannot open directory %x.</source>
-<target>Nepavyksta atversti direktorijos %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x į šiukšliadėžę perkelti nepavyko.</target>
+
+<source>Cannot open file %x.</source>
+<target>%x failo nepavyko atidaryti.</target>
+
+<source>Cannot find device %x.</source>
+<target>Negalima surasti įrenginio %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Negalima surasti %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Elemento tipas %x nepalaikomas:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Negalima ištrinti virtualios nuorodos %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Negalima nustatyti laisvos disko dalies %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x į šiukšliadėžę perkelti nepavyko.</target>
-
<source>Incorrect command line:</source>
<target>Netaisyklinga Komandinė eilutė:</target>
-<source>Error Code %x:</source>
-<target>Klaidos kodas %x:</target>
+<source>Error Code %x</source>
+<target>Klaidos kodas %x</target>
-<source>Unable to connect to %x.</source>
-<target>Nepavyko prisijungti prie %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Serveris nepalaiko %x autentifikavimo.</target>
+
+<source>Required:</source>
+<target>Reikia:</target>
+
+<source>Unable to access %x.</source>
+<target>Nepavyko prisijungti %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Operacijai skirtas laikas baigsis po %x sekundės.</pluralform>
+<pluralform>Operacijai skirtas laikas baigsis po %x sekundės.</pluralform>
+<pluralform>Operacijai skirtas laikas baigsis po %x sekundžių.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Vienu metu negalima laukti daugiau nei %x prisijungimas.</pluralform>
+<pluralform>Vienu metu negalima laukti daugiau nei %x prisijungimai.</pluralform>
+<pluralform>Vienu metu negalima laukti daugiau nei %x prisijungimų.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktyvūs susijungimai: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Nepavyko atidaryti SFTP kanalo %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -358,11 +408,17 @@ Esamas: %y baitai
<source>Database file %x does not yet exist.</source>
<target>Duomenų bazės failo %x dar nėra.</target>
-<source>Database file is corrupt:</source>
-<target>Duomenų bazės failas sugadintas:</target>
+<source>Database file is corrupted:</source>
+<target>Duomenų bazės failas yra sugadintas:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Duomenų bazės failas dar neturi informacijos apie paskutinį suvienodinimą.</target>
+
+<source>Loading file %x...</source>
+<target>Įkraunamas failas %x...</target>
-<source>Database files do not share a common session.</source>
-<target>Duomenų bazės failai nesidalina bendros sesijos.</target>
+<source>Saving file %x...</source>
+<target>Išsaugomas failas %x...</target>
<source>Searching for folder %x...</source>
<target>Ieškoma aplanko %x...</target>
@@ -392,9 +448,6 @@ Esamas: %y baitai
<source>Detecting abandoned lock...</source>
<target>Aptiktas paliktas užraktas...</target>
-<source>Saving file %x...</source>
-<target>Išsaugomas failas %x...</target>
-
<source>Items processed:</source>
<target>Elementų apdorota:</target>
@@ -650,14 +703,23 @@ Komanda inicijuojama jei:
<source>Not enough free disk space available in:</source>
<target>Nepakanka laisvos disko vietos:</target>
-<source>Required:</source>
-<target>Reikia:</target>
-
<source>Available:</source>
<target>Pasiekiama:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Aplankai grupuojami į vieną poaplankį. Prašome patikrinti jūsų pasirinkimus.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Kai kurie failai bus suvienodinti, keliuse pagrindiniuose aplankuose.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Norint išvengti konflikto, reiktų sukurti išskyrimo filtrus, kad kiekvienas atnaujintas failas, būtų priskiriamas tik vienam pagrindiniam aplankui.</target>
+
+<source>Versioning folder:</source>
+<target>Versijų valdymo aplankas:</target>
+
+<source>Base folder:</source>
+<target>Pagrindinis aplankas:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>>Versijų valdymo aplankas bus suvienodintas todėl, kad jis turi pagrindinį aplanką.</target>
<source>Synchronizing folder pair:</source>
<target>Suvienodinama aplankų pora:</target>
@@ -665,6 +727,9 @@ Komanda inicijuojama jei:
<source>Generating database...</source>
<target>Sukuriama duomenų bazė...</target>
+<source>Loading...</source>
+<target>Įkraunama...</target>
+
<source>job name</source>
<target>Užduoties pavadinimas</target>
@@ -696,7 +761,7 @@ Komanda inicijuojama jei:
<target>Sprendžiant šią problemą, galite persijungti i FreeFileSync pagrindinį langą.</target>
<source>&Don't show this warning again</source>
-<target>& Nerodyti daugiau šio perspįpėjimo</target>
+<target>& Nerodyti daugiau šio perspėjimo</target>
<source>&Ignore</source>
<target>&Ignoruoti</target>
@@ -789,15 +854,6 @@ Komanda inicijuojama jei:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Prašome pasirinkti aplanką vietinėje failų sistemoje, tinkle arba MTP įrenginyje.</target>
-<source>SFTP folder</source>
-<target>SFTP aplankas</target>
-
-<source>Select SFTP folder</source>
-<target>Pasirinkti SFTP aplanką</target>
-
-<source>Select alternative folder type</source>
-<target>Pažymėti alternatyvų aplanko tipą</target>
-
<source>&New</source>
<target>&Naujas</target>
@@ -843,11 +899,8 @@ Komanda inicijuojama jei:
<source>&Tools</source>
<target>&Įrankiai</target>
-<source>&Check for new version</source>
-<target>&Naujesnės versijos tikrinimas</target>
-
-<source>&Check now</source>
-<target>&Tikrinti dabar</target>
+<source>&Check for updates now</source>
+<target>&Dabar patikrinti atnaujinimus</target>
<source>Check &automatically once a week</source>
<target>Tikrinti &automatiškai kartą per savaitę</target>
@@ -867,6 +920,9 @@ Komanda inicijuojama jei:
<source>Remove folder pair</source>
<target>Pašalinti aplankų porą</target>
+<source>Access online storage</source>
+<target>Internetinės saugyklos prieiga</target>
+
<source>Swap sides</source>
<target>Sukeisti puses</target>
@@ -954,9 +1010,6 @@ Komanda inicijuojama jei:
<source>Include:</source>
<target>Įtraukti:</target>
-<source>Exclude:</source>
-<target>Išskirti:</target>
-
<source>Show examples</source>
<target>Rodyti pavyzdžius</target>
@@ -1040,8 +1093,11 @@ Komanda inicijuojama jei:
<source>Arrange folder pair</source>
<target>Sulygiuoti pagal aplanko porą</target>
-<source>Enter your SFTP login details:</source>
-<target>Įveskite jūsų SFTP prisijungimo duomenis:</target>
+<source>Enter your login details:</source>
+<target>Įveskite išsamią prisijungimo informaciją:</target>
+
+<source>Connection type:</source>
+<target>Prisijungimo būdas:</target>
<source>Server name or IP address:</source>
<target>Serverio vardas arba IP adresas:</target>
@@ -1049,11 +1105,29 @@ Komanda inicijuojama jei:
<source>Port:</source>
<target>Jungtis:</target>
+<source>Encryption:</source>
+<target>Kodavimas:</target>
+
+<source>&Disabled</source>
+<target>&Išjungta</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Aiškiai apibrėžtą initializacijos vektorius SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Autentifikavimas:</target>
+
+<source>&Password</source>
+<target>&Slaptažodis</target>
+
+<source>&Key file</source>
+<target>&Rakto failas</target>
+
<source>User name:</source>
<target>Vartotojo vardas:</target>
-<source>Password:</source>
-<target>Slaptažodis:</target>
+<source>Private key file:</source>
+<target>Privataus rakto files:</target>
<source>&Show password</source>
<target>&Rodyti slaptažodį</target>
@@ -1061,6 +1135,27 @@ Komanda inicijuojama jei:
<source>Directory on server:</source>
<target>Katalogas serveryje:</target>
+<source>Performance improvements:</source>
+<target>Veiklos gerinimai:</target>
+
+<source>How to get best performance?</source>
+<target>Kaip gauti geriausius rezultatus?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Aplanko nuskaitymas naudojant SSH jungtį:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Rekomenduojamas diapazonas: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP kanalai per jungtį:</target>
+
+<source>Detect server limit</source>
+<target>Aptikti serverio ribas</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 jungtys x 10 kanalų = 20 kartų greitesnis aplanko nuskaitymas</target>
+
<source>Select a directory on the server:</source>
<target>Pažymėti katalogą serveryje:</target>
@@ -1190,6 +1285,9 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Source code written in C++ using:</source>
<target>Šaltinio kodas parašytas su C++ naudojant:</target>
+<source>Donation details</source>
+<target>Išsamiau apie aukojimą</target>
+
<source>If you like FreeFileSync:</source>
<target>Jei Jums patinka FreeFileSync:</target>
@@ -1199,8 +1297,8 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Feedback and suggestions are welcome</source>
<target>Nuomonė ir patarimai laukiami</target>
-<source>Homepage</source>
-<target>Namų puslapis</target>
+<source>Home page</source>
+<target>Pagrindinis puslapis</target>
<source>Email</source>
<target>El. paštas</target>
@@ -1211,8 +1309,26 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Many thanks for localization:</source>
<target>Labai dėkojame už vertimą:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH Failų Persiuntimo Protokolas</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktyvuoti FreeFileSync Donoro Versiją, naudojant vieną iš sekančių metodų:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktyvuoti dabar per internetą:</target>
+
+<source>Activate online</source>
+<target>Actyvuoti per internetą</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Gauti aktyvavimo raktą, kuris veikia neprisijungus, iš šio URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopijuoti į mainų sritį</target>
+
+<source>Enter activation key:</source>
+<target>Įvesti aktyvavimo raktą:</target>
+
+<source>Activate offline</source>
+<target>Aktyvuoti neprisijungus</target>
<source>Save as Batch Job</source>
<target>Išsaugoti kaip užduočių paketą</target>
@@ -1229,6 +1345,9 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Select Time Span</source>
<target>Pasirinkti laiko atkarpą</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donoro Versija</target>
+
<source>&Options</source>
<target>&Parinktys</target>
@@ -1250,8 +1369,8 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Overview</source>
<target>Apžvalga</target>
-<source>&Download</source>
-<target>&Atsisiųsti</target>
+<source>&Show details</source>
+<target>&Rodyti išsamiai</target>
<source>A new version of FreeFileSync is available:</source>
<target>Yra nauja FreeFileSync versija:</target>
@@ -1494,8 +1613,17 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Log</source>
<target>Žurnalas</target>
-<source>Loading...</source>
-<target>Įkraunama...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Įdiegimo failai yra pažeisti. Prašome įdiegti iš naujo FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Ačiū, %x, už jūsų auką, bei parėmimą!</target>
+
+<source>Password:</source>
+<target>Slaptažodis:</target>
+
+<source>Key password:</source>
+<target>Rakto slaptažodis:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1557,6 +1685,9 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>&Show</source>
<target>&Rodyti</target>
+<source>Downloading update...</source>
+<target>Siunčiamas atanujinimas...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Sutapatinti vienodus failus lyginant failų modifikavimo laiką ir dydį.</target>
@@ -1650,12 +1781,33 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Percentage</source>
<target>Procentai</target>
+<source>Failed to retrieve update information.</source>
+<target>Nepavyko gauti atnaujimo informacijos.</target>
+
+<source>Automatic updates:</source>
+<target>Automatiniai atnaujinimai:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Reikalinga FreeFileSync Donoro Versija</target>
+
<source>Check for Program Updates</source>
<target>Tikrinti programos atnaujinimus</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Dabar automatiškai atnaujinti arba atnaujinimą atsisiųsti iš FreeFileSync pagrindinio puslapio?</target>
+
+<source>&Auto-update</source>
+<target>&Automatinis atnaujinimas</target>
+
+<source>&Home page</source>
+<target>&Pagrindinis puslapis</target>
+
<source>Download now?</source>
<target>Atsiųsti dabar?</target>
+<source>&Download</source>
+<target>&Atsisiųsti</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync yra naujausia.</target>
@@ -1668,14 +1820,20 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Consistency check failed for %x.</source>
<target>Nuoseklumo patikrinimas neįvyko %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Nepavyksta rasti sisteminės funkcijos %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Įdiegimas buvo registruotas kitoje operacinėje sistemoje.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Nepavyko aktyvuoti FreeFileSync Donoro Versijos.</target>
+
+<source>Incorrect activation key.</source>
+<target>Neteisingas aktyvavimo raktas.</target>
<source>Unable to register to receive system messages.</source>
<target>Nepavyko aktyvuoti sisteminių žinučių gavimo funkciją.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Įdiegimo failas yra pažeistas. Prašome įdiegti FreeFileSync išnaujo.</target>
+<source>Cannot find system function %x.</source>
+<target>Nepavyksta rasti sisteminės funkcijos %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nepavyko priregistruoti %x įrenginio pranešimų.</target>
@@ -1707,9 +1865,6 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Cannot copy attributes from %x to %y.</source>
<target>Nepavyko nukopijuoti atributų iš %x į %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Elemento tipas %x nepalaikomas:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1764,9 +1919,6 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Konfiguracinis failas %x yra neužbaigtas. Trūkstamiems elementams bus priskirtos pradinės rekšmės.</target>
-<source>Internet access failed.</source>
-<target>Interneto prieiga nepasiekiama.</target>
-
<source>Prepare installation</source>
<target>Ruošiamasi įdiegimui</target>
@@ -1836,18 +1988,12 @@ Tai garantuos pastovią buseną, netgi įvykus rimtai klaidai.
<source>Edit with FreeFileSync</source>
<target>Koreguoti su FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Ačių už jūsų aukas ir palaikymą!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ši donorų FreeFileSync diegimo programa pasiekė dienos įdiegimo limitą.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Parsisiųsti iš pagrindinio puslapio standartinę FreeFileSync versiją?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Nešiojama versija negali būti įdiegta į pasirinktą aplanką.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Prašome pasirinkti vietinio įdiegimo metodą arba pakeiskite aplaką.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Tylusis įdiegimo rėžimas galimas tik tai FreeFileSync Donoro Versijoje.</target>
+
diff --git a/FreeFileSync/Build/Languages/norwegian.lng b/FreeFileSync/Build/Languages/norwegian.lng
index 5e1cf95e..d8f6de80 100755
--- a/FreeFileSync/Build/Languages/norwegian.lng
+++ b/FreeFileSync/Build/Languages/norwegian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Setter standard synkroniserings-retning: Gamle filer vil bli overskrevet med nyere filer.</target>
-<source>Creating folder %x</source>
-<target>Lager mappen %x</target>
-
<source>Creating file %x</source>
<target>Lager filen %x</target>
+<source>Creating folder %x</source>
+<target>Lager mappen %x</target>
+
<source>Creating symbolic link %x</source>
<target>Oppretter den symbolske forbindelsen %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Hvis denne feilen blir ignorert vil mappene bli vurdert som tomme. Manglende mapper opprettes automatisk ved behov.</target>
-<source>A folder input field is empty.</source>
-<target>Der er ikke skrevet inn noe mappenavn.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Den samsvarende mappen betraktes som tom.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>De følgende mappestier er avhengige av hverandre:</target>
-
<source>File %x has an invalid date.</source>
<target>Filen %x har en ugyldig dato.</target>
<source>Date:</source>
<target>Dato:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Filene %x har den samme datoen men har forskjellig størrelse.</target>
+<source>Files have the same date but a different size.</source>
+<target>Filene har samme dato, men en annen størrelse.</target>
<source>Size:</source>
<target>Størrelse:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Innholdsanalyse er utelatt for ekskluderte filer %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Innholdssammenligningen ble hoppet over for ekskluderte filer.</target>
<source>Items differ in attributes only</source>
<target>Elementene har kun forskjellige attributter</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Starter sammenligning</target>
+<source>A folder input field is empty.</source>
+<target>Der er ikke skrevet inn noe mappenavn.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Den samsvarende mappen betraktes som tom.</target>
+
+<source>Exclude:</source>
+<target>Ekskludér:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>En basismappe til et mappepar finnes i den andre.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Mappen bør utelukkes fra synkronisering via filter.</target>
+
<source>Calculating sync directions...</source>
<target>Beregner synkroniserings-retninger...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Oppdater attributter til høyre</target>
-<source>Cannot write permissions of %x.</source>
-<target>Kan ikke skrive tillatelsene til %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operasjonen støttes ikke for ulike typer basismapper.</target>
-
<source>Cannot write file %x.</source>
<target>Kan ikke opprette filen %x.</target>
@@ -267,6 +267,12 @@ Forventet: %x bytes
Faktisk: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Kan ikke skrive tillatelsene til %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operasjonen støttes ikke for ulike typer basismapper.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Kan ikke kopiere symbolsk forbindelse %x til %y.</target>
@@ -276,36 +282,30 @@ Faktisk: %y bytes
<source>Unable to connect to %x.</source>
<target>Kan ikke koble til %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Kunne ikke få informasjon om server %x.</target>
+
<source>Cannot open directory %x.</source>
<target>Kan ikke åpne katalog %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Kan ikke oppsummere katalog %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Kan ikke lese katalogen %x.</target>
<source>Cannot read file attributes of %x.</source>
<target>Kan ikke lese filattributterne på %x.</target>
-<source>Cannot find %x.</source>
-<target>Kan ikke finne %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Kan ikke åpne filen %x.</target>
-
<source>Cannot read file %x.</source>
<target>Kan ikke lese filen %x.</target>
-<source>Cannot find device %x.</source>
-<target>Kan ikke finne enhet %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Kan ikke lage katalog %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Kan ikke slette katalog %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Kan ikke slette filen %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Kan ikke slette katalog %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Kan ikke oppdatere tidsendring på %x.</target>
@@ -315,15 +315,39 @@ Faktisk: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Kan ikke løse den symbolske forbindelsen %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Kan ikke fastslå ledig diskplass for %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Kunne ikke flytte %x til papirkurven.</target>
+<source>Cannot open file %x.</source>
+<target>Kan ikke åpne filen %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Kan ikke finne enhet %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Kan ikke finne %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Elementtypen %x støttes ikke:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Kan ikke slette symbolsk lenke %x.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Kan ikke fastslå ledig diskplass for %x.</target>
+
<source>Incorrect command line:</source>
<target>Ugyldig kommando:</target>
+<source>Error Code %x</source>
+<target>Feilkode %x</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>Tjeneren støtter ikke autentisering via %x.</target>
+
+<source>Required:</source>
+<target>Krav:</target>
+
<source>Unable to access %x.</source>
<target>Får ikke tilgang til %x.</target>
@@ -381,11 +405,17 @@ Faktisk: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Databasefilen %x finnes ikke ennå.</target>
-<source>Database file is corrupt:</source>
-<target>Databasefilen er ødelagt:</target>
+<source>Database file is corrupted:</source>
+<target>Databasefilen er skadet:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Databasefilene inneholder ennå ikke informasjon om siste synkronisering.</target>
-<source>Database files do not share a common session.</source>
-<target>Databasefiler kan ikke dele en felles handling.</target>
+<source>Loading file %x...</source>
+<target>Laster fil %x ...</target>
+
+<source>Saving file %x...</source>
+<target>Lagrer filen %x...</target>
<source>Searching for folder %x...</source>
<target>Søker etter mappen %x...</target>
@@ -414,9 +444,6 @@ Faktisk: %y bytes
<source>Detecting abandoned lock...</source>
<target>Finner etterlatt lås...</target>
-<source>Saving file %x...</source>
-<target>Lagrer filen %x...</target>
-
<source>Items processed:</source>
<target>Elementer behandlet:</target>
@@ -671,14 +698,23 @@ Kommandoen utføres hvis:
<source>Not enough free disk space available in:</source>
<target>Ikke nok ledig diskplass på:</target>
-<source>Required:</source>
-<target>Krav:</target>
-
<source>Available:</source>
<target>Tilgjengelig:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Flere mappepar skriver til en felles undermappe. Sjekk oppsettet ditt.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Noen filer vil bli synkronisert som en del av flere basemapper.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>For å unngå konflikter, sett opp utelukkelsesfiltre, slik at hver oppdaterte fil regnes av bare én basemappe.</target>
+
+<source>Versioning folder:</source>
+<target>Versjonsmappe:</target>
+
+<source>Base folder:</source>
+<target>Basemappe:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Versjonsmappen synkroniseres fordi den finnes i en basemappe.</target>
<source>Synchronizing folder pair:</source>
<target>Synkroniserer mappepar:</target>
@@ -686,6 +722,9 @@ Kommandoen utføres hvis:
<source>Generating database...</source>
<target>Lager database...</target>
+<source>Loading...</source>
+<target>Laster...</target>
+
<source>job name</source>
<target>jobbnavn</target>
@@ -809,15 +848,6 @@ Kommandoen utføres hvis:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Velg en mappe på lokalt filsystem, nettverk eller på en MTP-enhet.</target>
-<source>SFTP folder</source>
-<target>SFTP-mappe</target>
-
-<source>Select SFTP folder</source>
-<target>Velg SFTF mappa</target>
-
-<source>Select alternative folder type</source>
-<target>Velg alternativ mappetype</target>
-
<source>&New</source>
<target>&Ny</target>
@@ -863,11 +893,8 @@ Kommandoen utføres hvis:
<source>&Tools</source>
<target>&Verktøy</target>
-<source>&Check for new version</source>
-<target>&Søk etter ny versjon</target>
-
-<source>&Check now</source>
-<target>&Søk nå</target>
+<source>&Check for updates now</source>
+<target>&Sjekk etter oppdateringer nå</target>
<source>Check &automatically once a week</source>
<target>Søk &automatisk en gang i uken</target>
@@ -887,6 +914,9 @@ Kommandoen utføres hvis:
<source>Remove folder pair</source>
<target>Fjern mappe-par</target>
+<source>Access online storage</source>
+<target>Få tilgang til nettlagring</target>
+
<source>Swap sides</source>
<target>Bytt sider</target>
@@ -974,9 +1004,6 @@ Kommandoen utføres hvis:
<source>Include:</source>
<target>Inkludér:</target>
-<source>Exclude:</source>
-<target>Ekskludér:</target>
-
<source>Show examples</source>
<target>Vis eksempler</target>
@@ -1060,8 +1087,11 @@ Kommandoen utføres hvis:
<source>Arrange folder pair</source>
<target>Ordne mappepar</target>
-<source>Enter your SFTP login details:</source>
-<target>Skriv inn dine SFTP innloggings-opplysninger:</target>
+<source>Enter your login details:</source>
+<target>Skriv inn dine innloggingsdetaljer:</target>
+
+<source>Connection type:</source>
+<target>Tilkoblingstype:</target>
<source>Server name or IP address:</source>
<target>Servernavn eller IP-adresse:</target>
@@ -1069,6 +1099,15 @@ Kommandoen utføres hvis:
<source>Port:</source>
<target>Post:</target>
+<source>Encryption:</source>
+<target>Kryptering:</target>
+
+<source>&Disabled</source>
+<target>&Utkoplet</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Eksplisitt SSL/TLS</target>
+
<source>Authentication:</source>
<target>Autentisering:</target>
@@ -1196,7 +1235,10 @@ Kommandoen utføres hvis:
Copy to a temporary file (*.ffs_tmp) before overwriting target.
This guarantees a consistent state even in case of a serious error.
</source>
-<target>Kopiér til en midlertidig fil (*.ffs_tmp) før overskriving. Sikrer prosessen ved alvorlige feil.</target>
+<target>
+Kopiér til en midlertidig fil (*.ffs_tmp) før overskriving.
+Sikrer prosessen ved alvorlige feil.
+</target>
<source>(recommended)</source>
<target>(anbefalt)</target>
@@ -1237,6 +1279,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Kildekoden er skrevet i C++ med hjelp fra:</target>
+<source>Donation details</source>
+<target>Donasjon detaljer</target>
+
<source>If you like FreeFileSync:</source>
<target>Hvis du liker FreeFileSync:</target>
@@ -1246,7 +1291,7 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Tilbakemeldinger og forslag er ønsket</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Hjemmeside</target>
<source>Email</source>
@@ -1258,8 +1303,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Takk for oversettelse:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH filoverførings-protokoll</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktivér FreeFileSync Donation Versjon med en av følgende metoder:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktivér via internett nå:</target>
+
+<source>Activate online</source>
+<target>Aktivér på nett</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Hent en aktiveringsnøkkel fra følgende URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopiér til utklippstavla</target>
+
+<source>Enter activation key:</source>
+<target>Skriv inn en aktiveringsnøkkel:</target>
+
+<source>Activate offline</source>
+<target>Aktivér frakoplet</target>
<source>Save as Batch Job</source>
<target>Lagre som batchfil</target>
@@ -1276,6 +1339,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Velg tids-intervall</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Valg</target>
@@ -1297,8 +1363,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Oversikt</target>
-<source>&Download</source>
-<target>&Last ned</target>
+<source>&Show details</source>
+<target>&Vis detaljer</target>
<source>A new version of FreeFileSync is available:</source>
<target>En ny versjon av FreeFileSync er tilgjengelig:</target>
@@ -1537,8 +1603,11 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Logg</target>
-<source>Loading...</source>
-<target>Laster...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Installasjonsfilene er ødelagte. Installer FreeFileSync på nytt.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Takk, %x, for ditt bidrag og støtte!</target>
<source>Password:</source>
<target>Passord:</target>
@@ -1603,6 +1672,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Vis</target>
+<source>Downloading update...</source>
+<target>Laster ned oppdatering...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Gjennkjenn like filer ved å sammenligne filtid og størrelse.</target>
@@ -1696,12 +1768,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Prosent</target>
+<source>Failed to retrieve update information.</source>
+<target>Kunne ikke hente oppdateringsinformasjon.</target>
+
+<source>Automatic updates:</source>
+<target>Automatiske oppdateringer:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Behøver FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Søk etter program-oppdateringer</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Auto-oppdatér nå, eller laste ned manuelt fra FreeFileSyncs hjemmeside?</target>
+
+<source>&Auto-update</source>
+<target>&Auto-oppdatér</target>
+
+<source>&Home page</source>
+<target>&Hjemmeside</target>
+
<source>Download now?</source>
<target>Last ned nå ?</target>
+<source>&Download</source>
+<target>&Last ned</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync er oppdatert.</target>
@@ -1714,14 +1807,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Innholdssjekken gikk galt for %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Kan ikke finne systemfunksjonen %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Installasjon ble registrert på et annet operativsystem.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Kunne ikke aktivere FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Feil aktiveringsnøkkel.</target>
<source>Unable to register to receive system messages.</source>
<target>Kunne ikke registrere for å motta systembeskjeder.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Installasjonsfila er ødelagt. Reeinstaller FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Kan ikke finne systemfunksjonen %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Kunne ikke registere enhets-varsler for %x.</target>
@@ -1753,9 +1852,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Kan ikke kopiere attributtene fra %x til %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Elementtypen %x støttes ikke:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1798,9 +1894,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot change process I/O priorities.</source>
<target>Kan ikke endre I/O prioriteter.</target>
-<source>Error Code %x:</source>
-<target>Feilkode %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Det å sjekke papirkurven gikk galt for mappen %x.</target>
@@ -1810,9 +1903,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Konfigurasjonsfil %x er ufullstendig. De manglende elementene vil bli satt til standardverdiene .</target>
-<source>Internet access failed.</source>
-<target>Internett-tilgang gikk galt.</target>
-
<source>Prepare installation</source>
<target>Forbered installering</target>
@@ -1882,15 +1972,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Rediger med FreeFileSync</target>
-<source>Thank you, %x, for your donation and support!</source>
-<target>Takk, %x, for ditt bidrag og støtte!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Denne FreeFileSync installasjon for donorer har nått sin daglige installasjonsgrense.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Last ned standardversjonen fra FreeFileSync sin hjemmeside nå</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Den bærbare versjonen kan ikke installere i den valgte mappen.</target>
diff --git a/FreeFileSync/Build/Languages/polish.lng b/FreeFileSync/Build/Languages/polish.lng
index a8de118c..9dba88b5 100755
--- a/FreeFileSync/Build/Languages/polish.lng
+++ b/FreeFileSync/Build/Languages/polish.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Tworzenie folderu %x</target>
-
<source>Creating file %x</source>
<target>Tworzenie pliku %x</target>
+<source>Creating folder %x</source>
+<target>Tworzenie folderu %x</target>
+
<source>Creating symbolic link %x</source>
<target>Tworzenie dowiązania symbolicznego %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Jeżeli ten błąd zostanie zignorowany, katalogi zostaną uznane za puste. Brakujące katalogi będą w razie potrzeby utworzone automatycznie.</target>
-<source>A folder input field is empty.</source>
-<target>Pole katalog źródłowy jest puste.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Katalog będzie oznaczony jako pusty.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Następujące ścieżki katalogów są od siebie zależne:</target>
-
<source>File %x has an invalid date.</source>
<target>Plik %x ma nieprawidłową datę.</target>
<source>Date:</source>
<target>Data:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Pliki %x mają tę samą datę, lecz różne rozmiary.</target>
+<source>Files have the same date but a different size.</source>
+<target>Pliki mają tą samą datę ale różny rozmiar.</target>
<source>Size:</source>
<target>Rozmiar:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Porównywanie zostało pominięte dla wykluczonych plików %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Dla wykluczonych plików porównywanie zawartości nie zostało wykonane.</target>
<source>Items differ in attributes only</source>
<target>Elementy różnią się wyłącznie atrybutami</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Kompresowanie</target>
+<source>A folder input field is empty.</source>
+<target>Pole katalog źródłowy jest puste.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Katalog będzie oznaczony jako pusty.</target>
+
+<source>Exclude:</source>
+<target>Wyklucz:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Jeden z katalogów jest zawarty w drugim.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Katalog powinien zostać wykluczony przy wykorzystaniu filtrów.</target>
+
<source>Calculating sync directions...</source>
<target>Obliczanie kierunków synchronizacji...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Aktualizuj atrybuty po prawej stronie</target>
-<source>Cannot write permissions of %x.</source>
-<target>Nie można zapisać uprawnień %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operacja nie jest wspierana dla różnych typów katalogów.</target>
-
<source>Cannot write file %x.</source>
<target>Nie można zapisać pliku %x.</target>
@@ -267,6 +267,12 @@ Oczekiwany: %x bajtów
Przesłany: %y bajtów
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Nie można zapisać uprawnień %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operacja nie jest wspierana dla różnych typów katalogów.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Nie można skopiować linku symbolicznego %x do %y.</target>
@@ -276,36 +282,30 @@ Przesłany: %y bajtów
<source>Unable to connect to %x.</source>
<target>Błąd połączenia do %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Nie można uzyskać informacji o serwerze %x.</target>
+
<source>Cannot open directory %x.</source>
<target>Nie można otworzyć katalogu %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Nie można wyliczyć katalogu %x.</target>
-
-<source>Cannot read file attributes of %x.</source>
-<target>Nie można odczytać atrybutów pliku %x.</target>
-
-<source>Cannot find %x.</source>
-<target>Nie można odnaleźć %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Nie można otworzyć pliku %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Nie można odczytać katalogu %x.</target>
<source>Cannot read file %x.</source>
<target>Nie można odczytać pliku %x.</target>
-<source>Cannot find device %x.</source>
-<target>Nie można odnaleźć urządzenia %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Nie można odczytać atrybutów pliku %x.</target>
<source>Cannot create directory %x.</source>
<target>Nie można utworzyć katalogu %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Nie można usunąć katalogu %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Nie można usunąć pliku %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Nie można usunąć katalogu %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Nie można zapisać czasu modyfikacji %x.</target>
@@ -315,15 +315,68 @@ Przesłany: %y bajtów
<source>Cannot resolve symbolic link %x.</source>
<target>Nie można określić położenia dowiązania symbolicznego %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Nie można określić wolnego miejsca na %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Nie można przenieść %x do kosza.</target>
+<source>Cannot open file %x.</source>
+<target>Nie można otworzyć pliku %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Nie można odnaleźć urządzenia %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Nie można odnaleźć %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Element typu %x nie jest wspierany:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Nie można usunąć dowiązania symbolicznego %x.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Nie można określić wolnego miejsca na %x.</target>
+
<source>Incorrect command line:</source>
<target>Niepoprawne polecenie:</target>
+<source>Error Code %x</source>
+<target>Kod błędu %x</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>Serwer nie wspiera uwierzytelniania przez %x.</target>
+
+<source>Required:</source>
+<target>Wymagane:</target>
+
+<source>Unable to access %x.</source>
+<target>Brak dostępu do %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Przekroczono czas oczekiwania 1 sekundy dla zadania.</pluralform>
+<pluralform>Przekroczono czas oczekiwania %x sekund dla zadania.</pluralform>
+<pluralform>Przekroczono czas oczekiwania %x sekund dla zadania.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Nie można oczekiwać na więcej niż 1 zadanie na raz.</pluralform>
+<pluralform>Nie można oczekiwać na więcej niż %x zadania na raz.</pluralform>
+<pluralform>Nie można oczekiwać na więcej niż %x zadań na raz.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktywne połączenia: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Nie można otworzyć kanału SFTP numer %x.</target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -355,11 +408,17 @@ Przesłany: %y bajtów
<source>Database file %x does not yet exist.</source>
<target>Plik bazy danych %x nie istnieje.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Plik bazy danych jest uszkodzony:</target>
-<source>Database files do not share a common session.</source>
-<target>Pliki bazy danych nie współdzielą sesji.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Pliki bazy danych nie posiadają żadnych informacji o poprzednich synchronizacjach.</target>
+
+<source>Loading file %x...</source>
+<target>Wczytywanie pliku %x...</target>
+
+<source>Saving file %x...</source>
+<target>Zapisywanie pliku %x...</target>
<source>Searching for folder %x...</source>
<target>Wyszukiwanie katalogu %x...</target>
@@ -389,9 +448,6 @@ Przesłany: %y bajtów
<source>Detecting abandoned lock...</source>
<target>Wykrywanie nieaktywnej blokady...</target>
-<source>Saving file %x...</source>
-<target>Zapisywanie pliku %x...</target>
-
<source>Items processed:</source>
<target>Przetworzone elementy:</target>
@@ -642,19 +698,28 @@ Komenda jest wykonywana gdy:
<target>Te elementy znajdują się w konflikcie, którego nie można rozwiązać. Pliki nie zostaną zsynchronizowane:</target>
<source>The following folders are significantly different. Please check that the correct folders are selected for synchronization.</source>
-<target><Poniższe katalogi znacząco się różnią. Zweryfikuj czy do synchronizacji zostały określone prawidłowe katalogi.</target>
+<target>Poniższe katalogi znacząco się różnią. Zweryfikuj czy do synchronizacji zostały określone prawidłowe katalogi.</target>
<source>Not enough free disk space available in:</source>
<target>Brak wystarczającej przestrzeni dyskowej na:</target>
-<source>Required:</source>
-<target>Wymagane:</target>
-
<source>Available:</source>
<target>Dostępne:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Wiele par katalogów zapisuje do wspólnego podkatalogu. Przejrzyj konfigurację.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Niektóre pliki będą zsynchronizowane jako część kilku katalogów źródłowych.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Aby uniknąc konfliktów ustaw filtry tak aby wykluczyć przynależność pliku do wielu katalogów źródłowych.</target>
+
+<source>Versioning folder:</source>
+<target>Wersjonowanie katalogów:</target>
+
+<source>Base folder:</source>
+<target>Katalog źródłowy:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Katalog potrzebny do wersjonowania będzie zsynchronizowany ponieważ zawiera się w katalogu bazowym.</target>
<source>Synchronizing folder pair:</source>
<target>Synchronizacja katalgów:</target>
@@ -662,6 +727,9 @@ Komenda jest wykonywana gdy:
<source>Generating database...</source>
<target>Generowanie bazy danych...</target>
+<source>Loading...</source>
+<target>Wczytywanie...</target>
+
<source>job name</source>
<target>nazwa zadania</target>
@@ -786,15 +854,6 @@ Komenda jest wykonywana gdy:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Okreś katalog lokalny, sieciowy bądź urządzenie MTP.</target>
-<source>SFTP folder</source>
-<target>Katalog SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Określ katalog SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Określ inny typ katalogu</target>
-
<source>&New</source>
<target>&Nowy</target>
@@ -840,11 +899,8 @@ Komenda jest wykonywana gdy:
<source>&Tools</source>
<target>&Narzędzia</target>
-<source>&Check for new version</source>
-<target>Sprawdź &nową wersję</target>
-
-<source>&Check now</source>
-<target>Spra&wdź teraz</target>
+<source>&Check for updates now</source>
+<target>&Sprawdź aktualizacje</target>
<source>Check &automatically once a week</source>
<target>Sprawdzaj &automatycznie raz w tygodniu</target>
@@ -864,6 +920,9 @@ Komenda jest wykonywana gdy:
<source>Remove folder pair</source>
<target>Usuń katalogi</target>
+<source>Access online storage</source>
+<target>Dostęp do zasobu zdalnego</target>
+
<source>Swap sides</source>
<target>Zamień stronami</target>
@@ -951,9 +1010,6 @@ Komenda jest wykonywana gdy:
<source>Include:</source>
<target>Dołącz:</target>
-<source>Exclude:</source>
-<target>Wyklucz:</target>
-
<source>Show examples</source>
<target>Przykład</target>
@@ -1037,8 +1093,11 @@ Komenda jest wykonywana gdy:
<source>Arrange folder pair</source>
<target>Uporządkuj parę katalogów</target>
-<source>Enter your SFTP login details:</source>
-<target>Wprowadź dane logowania do serwera SFTP:</target>
+<source>Enter your login details:</source>
+<target>Wprowadź dane do logowania:</target>
+
+<source>Connection type:</source>
+<target>Typ połączenia:</target>
<source>Server name or IP address:</source>
<target>Nazwa serwera, lub adres IP:</target>
@@ -1046,11 +1105,29 @@ Komenda jest wykonywana gdy:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Szyfrowanie:</target>
+
+<source>&Disabled</source>
+<target>&Wyłączony:</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Uwierzytelnianie:</target>
+
+<source>&Password</source>
+<target>&Hasło:</target>
+
+<source>&Key file</source>
+<target>Plik &klucza</target>
+
<source>User name:</source>
<target>Nazwa użytkownika:</target>
-<source>Password:</source>
-<target>Hasło:</target>
+<source>Private key file:</source>
+<target>Plik klucza prywatnego:</target>
<source>&Show password</source>
<target>&Pokaż hasło</target>
@@ -1058,6 +1135,27 @@ Komenda jest wykonywana gdy:
<source>Directory on server:</source>
<target>Katalog na serwerze:</target>
+<source>Performance improvements:</source>
+<target>Polepszenie wydajności:</target>
+
+<source>How to get best performance?</source>
+<target>Jak uzyskać lepszą wydajność?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Połączenie SSH dla katalogów:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Sugerowany zakres: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Liczba kanałów dla połączenia SFTP:</target>
+
+<source>Detect server limit</source>
+<target>Wykryj limity serwera</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 połączenia x 10 kanałów = 20 razy szybsze odczytywanie katalogów</target>
+
<source>Select a directory on the server:</source>
<target>Określ katalog na serwerze:</target>
@@ -1187,6 +1285,9 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Source code written in C++ using:</source>
<target>Kod stworzony w C++ z wykorzystaniem:</target>
+<source>Donation details</source>
+<target>Szczegóły dotacji</target>
+
<source>If you like FreeFileSync:</source>
<target>Jeżeli lubisz FreeFileSync:</target>
@@ -1196,8 +1297,8 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Feedback and suggestions are welcome</source>
<target>Wszelkie opinie i sugestie mile widziane</target>
-<source>Homepage</source>
-<target>Strona domowa</target>
+<source>Home page</source>
+<target>Strona domowa:</target>
<source>Email</source>
<target>Poczta</target>
@@ -1208,8 +1309,26 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Many thanks for localization:</source>
<target>Podziękowania za tłumaczenia:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH File Transfer Protocol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktywuj FreeFileSync Donation Edition jedną z poniższych metod:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktywuj przez internet:</target>
+
+<source>Activate online</source>
+<target>Aktywuj online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Pobierz offline'owy klucz aktywacyjny z poniższego adresu:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopuj do schowka</target>
+
+<source>Enter activation key:</source>
+<target>Wprowadź klucz aktywacyjny:</target>
+
+<source>Activate offline</source>
+<target>Aktywuj offline</target>
<source>Save as Batch Job</source>
<target>Zapisz w trybie wsadowym</target>
@@ -1226,6 +1345,9 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Select Time Span</source>
<target>Określ</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Opcje</target>
@@ -1247,8 +1369,8 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Overview</source>
<target>Przegląd</target>
-<source>&Download</source>
-<target>&Pobierz</target>
+<source>&Show details</source>
+<target>&Pokaż szczegóły</target>
<source>A new version of FreeFileSync is available:</source>
<target>Dostępna jest nowa wersja FreeFileSync:</target>
@@ -1491,8 +1613,17 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Wczytywanie...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Pliki instalacyjne są uszkodzone. Przeinstaluj program FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Dziękujemy %x za Twoje wsparcie!</target>
+
+<source>Password:</source>
+<target>Hasło:</target>
+
+<source>Key password:</source>
+<target>Hasło klucza:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1554,6 +1685,9 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>&Show</source>
<target>&Przywróć</target>
+<source>Downloading update...</source>
+<target>Pobieranie aktualizacji...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Określ różnice w plikach na podstawie czasu modyfikacji i rozmiaru.</target>
@@ -1647,12 +1781,33 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Percentage</source>
<target>Procentowo</target>
+<source>Failed to retrieve update information.</source>
+<target>Nie można pobrać informacji o aktualizacji.</target>
+
+<source>Automatic updates:</source>
+<target>Automatyczne aktualizacje:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Wymaga FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Sprawdź dostępne aktualizacje.</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Automatycznie zaktualizować teraz czy ręcznie pobrać ze strony FreeFileSync</target>
+
+<source>&Auto-update</source>
+<target>&Auto-aktualizacja</target>
+
+<source>&Home page</source>
+<target>Strona &domowa</target>
+
<source>Download now?</source>
<target>Pobrać teraz?</target>
+<source>&Download</source>
+<target>&Pobierz</target>
+
<source>FreeFileSync is up to date.</source>
<target>Posiadasz aktualną wersję FreeFileSync.</target>
@@ -1665,14 +1820,20 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Consistency check failed for %x.</source>
<target>Plik %x jest niespójny.</target>
-<source>Cannot find system function %x.</source>
-<target>Nie można odnaleźć funkcji systemowej %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Instalacja została zarejestrowana na innym systemie operacyjnym.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Błąd aktywacji FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Nipoprawny klucz aktywacyjny.</target>
<source>Unable to register to receive system messages.</source>
<target>Błąd podczas rejestrowania do odbioru komunikatów systemowych.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Pliki instalacyjne są uszkodzone. Przeinstaluj FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Nie można odnaleźć funkcji systemowej %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nie można zarejestrować powiadomień urządzenia dla %x.</target>
@@ -1704,9 +1865,6 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Cannot copy attributes from %x to %y.</source>
<target>Nie można skopiować atrybutów z %x do %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Element typu %x nie jest wspierany:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1752,9 +1910,6 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Cannot change process I/O priorities.</source>
<target>Nie można zmienić priorytetu I/O procesu.</target>
-<source>Error Code %x:</source>
-<target>Kod błędu %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Sprawdzanie kosza systemowego dla katalogu %x zakończone niepowodzeniem.</target>
@@ -1764,9 +1919,6 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Plik konfiguracyjny %x jest niekompletny. Zostaną ustawione domyśle wartości dla brakujących elementów.</target>
-<source>Internet access failed.</source>
-<target>Błąd połączenia Internetowego.</target>
-
<source>Prepare installation</source>
<target>Przygotuj instalację</target>
@@ -1836,18 +1988,12 @@ program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a następnie nadp
<source>Edit with FreeFileSync</source>
<target>Edytuj przy użyciu FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Dziękujemy za wsparcie i dotacje!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ten instalator FreeFileSync osiągnął swój dzienny limit instalacji.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Pobrać standardową wersję programu FreeFileSync?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Przenośna wersja programu nie możne zostać zainstalowana w wybranym katalogu.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Wybierz lokalny typ instalacji lub określ inny katalog.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Konsolowy tryb instalacji dostępny jest tylko w wersji FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/portuguese.lng b/FreeFileSync/Build/Languages/portuguese.lng
index 9f9dfff2..056f54c0 100755
--- a/FreeFileSync/Build/Languages/portuguese.lng
+++ b/FreeFileSync/Build/Languages/portuguese.lng
@@ -1,6 +1,6 @@
<header>
<language>Português</language>
- <translator>Igor Ruckert</translator>
+ <translator>Igor Rückert</translator>
<locale>pt_PT</locale>
<image>flag_portugal.png</image>
<plural_count>2</plural_count>
@@ -11,7 +11,7 @@
<target>Ambos os lados tiveram alterações desde a última sincronização.</target>
<source>Cannot determine sync-direction:</source>
-<target>Não é possível saber a direção de sincronização:</target>
+<target>Não é possível saber a direcção de sincronização:</target>
<source>No change since last synchronization.</source>
<target>Não há alterações desde a última sincronização.</target>
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Criar pasta %x</target>
-
<source>Creating file %x</source>
<target>Criar ficheiro %x</target>
+<source>Creating folder %x</source>
+<target>Criar pasta %x</target>
+
<source>Creating symbolic link %x</source>
<target>Criar link simbólico %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Se este erro é ignorado as pastas serão consideradas vazias. Pastas ausentes são criados automaticamente quando necessário.</target>
-<source>A folder input field is empty.</source>
-<target>Um dos campos de directório para comparar está vazio.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>A pasta correspondente será considerada como vazia.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Os seguintes pares de pastas são dependentes:</target>
-
<source>File %x has an invalid date.</source>
<target>Ficheiro %x tem data inválida.</target>
<source>Date:</source>
<target>Data:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Os ficheiros %x têm a mesma data, mas tamanho diferente.</target>
+<source>Files have the same date but a different size.</source>
+<target>Os ficheiros possuem a mesma data mas tem tamanho diferente.</target>
<source>Size:</source>
<target>Tamanho:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Comparação por conteúdo foi ignorada para o ficheiro excluído %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>A comparação de conteúdo foi ignorada para arquivos excluídos.</target>
<source>Items differ in attributes only</source>
<target>Itens diferem apenas nos atributos</target>
@@ -158,7 +149,7 @@
<target>Activado</target>
<source>Disabled</source>
-<target>Desativado</target>
+<target>Desactivado</target>
<source>Copy locked files</source>
<target>Copiar ficheiros bloqueados</target>
@@ -176,7 +167,7 @@
<target>Correr com prioridade de fundo</target>
<source>Lock directories during sync</source>
-<target>Bloquear diretórios durante sincronia</target>
+<target>Bloquear directórios durante sincronia</target>
<source>Verify copied files</source>
<target>Verificar ficheiros copiados</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>A iniciar a comparação</target>
+<source>A folder input field is empty.</source>
+<target>Um dos campos de directório para comparar está vazio.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>A pasta correspondente será considerada como vazia.</target>
+
+<source>Exclude:</source>
+<target>Excluir:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Uma pasta base de um par de pastas está contida na outra.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>A pasta deve ser excluída da sincronização via filtro.</target>
+
<source>Calculating sync directions...</source>
<target>A calcular a direcção de sincronização...</target>
@@ -233,10 +239,10 @@
<target>Mover ficheiro à direita</target>
<source>Update left item</source>
-<target>Atualizar item esquerdo</target>
+<target>Actualizar item esquerdo</target>
<source>Update right item</source>
-<target>Atualizar item direito</target>
+<target>Actualizar item direito</target>
<source>Do nothing</source>
<target>Não fazer nada</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Actualizar atributos à direita</target>
-<source>Cannot write permissions of %x.</source>
-<target>Não é possível escrever as permissões de %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operação sem suporte para tipos de pastas base distintas.</target>
-
<source>Cannot write file %x.</source>
<target>Não é possível escrever o ficheiro %x.</target>
@@ -267,39 +267,45 @@ Esperado: %x bytes
Actual: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Não é possível escrever as permissões de %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operação sem suporte para tipos de pastas base distintas.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Não é possível criar o link simbólico de %x para %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Não é possível mover o ficheiro %x para %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Não é possível enumerar o directório %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Não é possível conectar-se em %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Não é possível ler os atributos do ficheiro %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Falha ao obter informações do servidor %x.</target>
-<source>Cannot find %x.</source>
-<target>Não é possível encontrar %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Não é possível abrir o directório %x.</target>
-<source>Cannot open file %x.</source>
-<target>Não é possível abrir o ficheiro %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Não é possível ler o directório %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Não é possível ler os atributos do ficheiro %x.</target>
<source>Cannot read file %x.</source>
<target>Não é possível ler o ficheiro %x.</target>
-<source>Cannot find device %x.</source>
-<target>Não é possível encontrar o dispositivo %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Não é possível criar o directório %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Não é possível eliminar o directório %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Não é possível eliminar o ficheiro %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Não é possível eliminar o directório %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Não é possível alterar a data de modificação a %x.</target>
@@ -309,23 +315,65 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Não é possível resolver o link simbólico %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Não é possível abrir o directório %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Não é possível mover %x para a reciclagem.</target>
+
+<source>Cannot open file %x.</source>
+<target>Não é possível abrir o ficheiro %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Não é possível encontrar o dispositivo %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Não é possível encontrar %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Tipo de item %x não é suportado:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Não é possível remover o link simbólico %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Não é possível determinar o espaço livre no disco %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Não é possível mover %x para a reciclagem.</target>
-
<source>Incorrect command line:</source>
<target>Linha de comandos incorrecta:</target>
-<source>Error Code %x:</source>
-<target>Código de erro %x:</target>
+<source>Error Code %x</source>
+<target>Código de Erro %x</target>
-<source>Unable to connect to %x.</source>
-<target>Não é possível conectar-se em %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>O servidor não suporta autenticação via %x.</target>
+
+<source>Required:</source>
+<target>Requirido:</target>
+
+<source>Unable to access %x.</source>
+<target>Incapaz de aceder %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>O tempo limite da operação esgotou após 1 segundo.</pluralform>
+<pluralform>O tempo limite da operação esgotou após %x segundos.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Não é possível aguardar em mais do que 1 conexão ao mesmo tempo.</pluralform>
+<pluralform>Não é possível aguardar em mais do que %x conexões ao mesmo tempo.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Conexões activas: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Falha ao abrir canal SFTP número %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Base de dados %x não existe.</target>
-<source>Database file is corrupt:</source>
-<target>Ficheiro de base de dados está corrompido:</target>
+<source>Database file is corrupted:</source>
+<target>O ficheiro da base de dados está corrompido:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Os ficheiros da base de dados ainda não contém informações sobre a última sincronização.</target>
+
+<source>Loading file %x...</source>
+<target>A carregar arquivo %x...</target>
-<source>Database files do not share a common session.</source>
-<target>As bases de dados são de sessões diferentes.</target>
+<source>Saving file %x...</source>
+<target>A guardar ficheiro %x...</target>
<source>Searching for folder %x...</source>
<target>À procura da pasta %x...</target>
@@ -390,9 +444,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Detectado bloqueio abandonado...</target>
-<source>Saving file %x...</source>
-<target>Guardar ficheiro %x...</target>
-
<source>Items processed:</source>
<target>Elementos processados:</target>
@@ -460,7 +511,7 @@ Actual: %y bytes
<target>Não é possível encontrar a pasta %x.</target>
<source>Select a folder</source>
-<target>Selecione uma pasta</target>
+<target>Seleccione uma pasta</target>
<source>&Open...</source>
<target>&Abrir...</target>
@@ -487,7 +538,7 @@ Actual: %y bytes
<target>Uso:</target>
<source>1. Select folders to watch.</source>
-<target>1. Selecionar pastas para observar.</target>
+<target>1. Seleccionar pastas para observar.</target>
<source>2. Enter a command line.</source>
<target>2. Inserir a linha de comando.</target>
@@ -514,7 +565,7 @@ Actual: %y bytes
<target>Tempo de espera (em segundos):</target>
<source>Idle time between last detected change and execution of command</source>
-<target>Tempo de espera entre a última alteração detetada e a execução do comando</target>
+<target>Tempo de espera entre a última alteração detectada e a execução do comando</target>
<source>Command line:</source>
<target>Linha de comandos:</target>
@@ -527,7 +578,7 @@ The command is triggered if:
<target>
O comando é executado se:
- ficheiros ou subpastas forem alterados
-- forem detetadas novas pastas (p.e. pen USB)
+- forem detectadas novas pastas (p.e. pen USB)
</target>
<source>Start</source>
@@ -546,7 +597,7 @@ O comando é executado se:
<target>Sincronização Automática</target>
<source>The following path does not support directory monitoring:</source>
-<target>O seguinte caminho não suporta o monitoramento de direcctório:</target>
+<target>O seguinte caminho não suporta a monitorização de direcctório:</target>
<source>Directory monitoring active</source>
<target>Monitorização de directório activa</target>
@@ -588,31 +639,31 @@ O comando é executado se:
<target>Personalizado</target>
<source>Multiple...</source>
-<target>Multiplo...</target>
+<target>Múltiplo...</target>
<source>Moving file %x to %y</source>
-<target>Mover ficheiro %x para %y</target>
+<target>A mover ficheiro %x para %y</target>
<source>Moving folder %x to %y</source>
-<target>Mover pasta %x para %y</target>
+<target>A mover pasta %x para %y</target>
<source>Moving symbolic link %x to %y</source>
-<target>Mover link simbólico %x para %y</target>
+<target>A mover link simbólico %x para %y</target>
<source>Removing old versions...</source>
<target>A remover versões antigas...</target>
<source>Updating file %x</source>
-<target>Atualizar ficheiro %x</target>
+<target>A actualizar ficheiro %x</target>
<source>Updating symbolic link %x</source>
-<target>Atualizar link simbólico %x</target>
+<target>A actualizar link simbólico %x</target>
<source>Verifying file %x</source>
<target>A verificar ficheiro %x</target>
<source>Updating attributes of %x</source>
-<target>Actualizar atributos de %x</target>
+<target>A actualizar atributos de %x</target>
<source>Cannot write file attributes of %x.</source>
<target>Não é possível escrever os atributos de %x.</target>
@@ -642,26 +693,38 @@ O comando é executado se:
<target>Os seguintes itens têm conflitos não resolvidos, e não serão sincronizados:</target>
<source>The following folders are significantly different. Please check that the correct folders are selected for synchronization.</source>
-<target>As seguintes pastas são significativamente diferentes. Por favor, verifique se as pastas corretas estão selecionadas para a sincronização.</target>
+<target>As seguintes pastas são significativamente diferentes. Por favor, verifique se as pastas corretas estão seleccionadas para a sincronização.</target>
<source>Not enough free disk space available in:</source>
<target>Não há espaço livre suficiente em:</target>
-<source>Required:</source>
-<target>Requirido:</target>
-
<source>Available:</source>
<target>Disponível:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Vários pares de pastas escrevem para uma subpasta comum. Por favor, revise a sua configuração.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Alguns ficheiros serão sincronizados como parte de múltiplas pastas base.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>A fim de evitar conflitos, configure os filtros de exclusão para que cada ficheiro actualizado seja considerado por somente uma pasta base.</target>
+
+<source>Versioning folder:</source>
+<target>Pasta de versão:</target>
+
+<source>Base folder:</source>
+<target>Pasta base:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>A pasta de versão será sincronizada pois ela está contida em uma pasta base.</target>
<source>Synchronizing folder pair:</source>
-<target>Sincronizar o par de pastas:</target>
+<target>A cincronizar o par de pastas:</target>
<source>Generating database...</source>
<target>A gerar base de dados...</target>
+<source>Loading...</source>
+<target>A carregar...</target>
+
<source>job name</source>
<target>nome da tarefa</target>
@@ -687,10 +750,10 @@ O comando é executado se:
<target>Sincronização completa com sucesso</target>
<source>Cleaning up old log files...</source>
-<target>A limpar ficheiros log antigos...</target>
+<target>A limpar ficheiros de log antigos...</target>
<source>You can switch to FreeFileSync's main window to resolve this issue.</source>
-<target>Pode mudar para a janela principal do FreeFileSync para resovler este problema.</target>
+<target>Pode mudar para a janela principal do FreeFileSync para resolver este problema.</target>
<source>&Don't show this warning again</source>
<target>&Não mostrar este aviso novamente</target>
@@ -750,7 +813,7 @@ O comando é executado se:
<target>Categoria</target>
<source>Action</source>
-<target>Ação</target>
+<target>Acção</target>
<source>Local comparison settings</source>
<target>Opções locais de comparação</target>
@@ -785,15 +848,6 @@ O comando é executado se:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Seleccione a pasta no sistema de ficheiros local, rede ou dispositivo MTP.</target>
-<source>SFTP folder</source>
-<target>Pasta SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Seleccionar pasta SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Seleccione o tipo de pasta alternativa</target>
-
<source>&New</source>
<target>&Novo</target>
@@ -804,7 +858,7 @@ O comando é executado se:
<target>Guardar como &batch...</target>
<source>Start &comparison</source>
-<target>Iniciar &comparaçao</target>
+<target>Iniciar &comparação</target>
<source>C&omparison settings</source>
<target>Opções de c&omparação</target>
@@ -839,14 +893,11 @@ O comando é executado se:
<source>&Tools</source>
<target>&Ferramentas</target>
-<source>&Check for new version</source>
-<target>&Procurar por actualizações</target>
-
-<source>&Check now</source>
-<target>&Verificar agora</target>
+<source>&Check for updates now</source>
+<target>&Procurar por actualizações agora</target>
<source>Check &automatically once a week</source>
-<target>Verificar &automaticamente uma vez por semana</target>
+<target>Procurar &automaticamente uma vez por semana</target>
<source>Cancel</source>
<target>Cancelar</target>
@@ -863,6 +914,9 @@ O comando é executado se:
<source>Remove folder pair</source>
<target>Remover o par de pastas</target>
+<source>Access online storage</source>
+<target>Aceder armazenagem local</target>
+
<source>Swap sides</source>
<target>Trocar lados</target>
@@ -900,7 +954,7 @@ O comando é executado se:
<target>Número de ficheiros e pastas a ser eliminados</target>
<source>Number of files that will be updated</source>
-<target>Número de ficheiros a ser atualizados</target>
+<target>Número de ficheiros a ser actualizados</target>
<source>Number of files and folders that will be created</source>
<target>Número de ficheiros e pastas a ser criados</target>
@@ -950,9 +1004,6 @@ O comando é executado se:
<source>Include:</source>
<target>Incluir:</target>
-<source>Exclude:</source>
-<target>Excluir:</target>
-
<source>Show examples</source>
<target>Mostrar exemplos</target>
@@ -987,7 +1038,7 @@ O comando é executado se:
</source>
<target>
- Não suportado em todos os sistemas
-- Require e cria ficheiros de base de dados
+- Requeri e cria ficheiros de base de dados
- A detecção não está disponível para a primeira sincronização
</target>
@@ -998,7 +1049,7 @@ O comando é executado se:
<target>&Reciclagem</target>
<source>Back up deleted and overwritten files in the recycle bin</source>
-<target>Fazer backup dos ficheiros apagados e substituidos na reciclagem</target>
+<target>Fazer backup dos ficheiros apagados e substituídos na reciclagem</target>
<source>&Permanent</source>
<target>&Permanente</target>
@@ -1036,8 +1087,11 @@ O comando é executado se:
<source>Arrange folder pair</source>
<target>Organizar par da pasta</target>
-<source>Enter your SFTP login details:</source>
-<target>Entre os detalhes de seu login SFTP:</target>
+<source>Enter your login details:</source>
+<target>Entre os detalhes do login:</target>
+
+<source>Connection type:</source>
+<target>Tipo de conexão:</target>
<source>Server name or IP address:</source>
<target>Nome do servidor ou endereço IP:</target>
@@ -1045,11 +1099,29 @@ O comando é executado se:
<source>Port:</source>
<target>Porta:</target>
+<source>Encryption:</source>
+<target>Criptografia:</target>
+
+<source>&Disabled</source>
+<target>&Desabilitada</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>SSL/TLS &Explícito</target>
+
+<source>Authentication:</source>
+<target>Autenticação:</target>
+
+<source>&Password</source>
+<target>&Palavra passe</target>
+
+<source>&Key file</source>
+<target>Ficheiro de &chave</target>
+
<source>User name:</source>
<target>Utilizador:</target>
-<source>Password:</source>
-<target>Palavra passe:</target>
+<source>Private key file:</source>
+<target>Ficheiro de chave privada:</target>
<source>&Show password</source>
<target>&Mostrar palavra passe</target>
@@ -1057,6 +1129,27 @@ O comando é executado se:
<source>Directory on server:</source>
<target>Directório no servidor:</target>
+<source>Performance improvements:</source>
+<target>Melhorias de desempenho:</target>
+
+<source>How to get best performance?</source>
+<target>Como obter um melhor desempenho?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Conexões SSH para leitura de directório:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Intervalo sugerido: [1 -10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Canais SFTP por conexão:</target>
+
+<source>Detect server limit</source>
+<target>Detectar limite do servidor</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 conexões X 10 canais = leitura de directórios 20 vezes mais rápida</target>
+
<source>Select a directory on the server:</source>
<target>Seleccione um directório no servidor:</target>
@@ -1160,7 +1253,7 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Transferir permissões de pasta e ficheiro.</target>
<source>Automatic retry on error:</source>
-<target>Retentar automaticamente em caso de erro:</target>
+<target>Repetir automaticamente em caso de erro:</target>
<source>Retry count:</source>
<target>Nº de tentativas:</target>
@@ -1186,6 +1279,9 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Source code written in C++ using:</source>
<target>Código fonte escrito em C++ utilizando:</target>
+<source>Donation details</source>
+<target>Detalhes da doação</target>
+
<source>If you like FreeFileSync:</source>
<target>Se gosta do FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Feedback and suggestions are welcome</source>
<target>Comentários e sugestões são apreciados</target>
-<source>Homepage</source>
-<target>Site</target>
+<source>Home page</source>
+<target>Sítio da web</target>
<source>Email</source>
<target>Email</target>
@@ -1207,8 +1303,26 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Many thanks for localization:</source>
<target>Muito obrigado pela localização:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protocolo de Transferência de Ficheiro SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Active o FreeFileSync Donation Edition por um dos seguintes métodos:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Active via Internet agora:</target>
+
+<source>Activate online</source>
+<target>Activar online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Obter uma chave de activação offline a partir da seguinte URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copiar da clipboard</target>
+
+<source>Enter activation key:</source>
+<target>Entre a chave de activação:</target>
+
+<source>Activate offline</source>
+<target>Activar offline</target>
<source>Save as Batch Job</source>
<target>Guardar como Ficheiro Batch</target>
@@ -1225,6 +1339,9 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Select Time Span</source>
<target>Seleccionar Intervalo de Tempo</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Opções</target>
@@ -1246,8 +1363,8 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Overview</source>
<target>Vista</target>
-<source>&Download</source>
-<target>&Download</target>
+<source>&Show details</source>
+<target>&Mostras detalhes</target>
<source>A new version of FreeFileSync is available:</source>
<target>Uma nova versão do FreeFileSync está disponível:</target>
@@ -1301,7 +1418,7 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Escolher direcção:</target>
<source>multiple selection</source>
-<target>seleção múltipla</target>
+<target>selecção múltipla</target>
<source>Include via filter:</source>
<target>Incluir via filtro:</target>
@@ -1319,7 +1436,7 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>&Copiar para...</target>
<source>&Delete</source>
-<target>&Deletar</target>
+<target>&Apagar</target>
<source>Include all</source>
<target>Incluir tudo</target>
@@ -1340,7 +1457,7 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Grande</target>
<source>Select time span...</source>
-<target>Selecione intervalo de tempo...</target>
+<target>Seleccione o intervalo de tempo...</target>
<source>Show "%x"</source>
<target>Mostrar "%x"</target>
@@ -1373,16 +1490,16 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Limpar filtro</target>
<source>Show files that exist on left side only</source>
-<target>Mostrar ficheiros existentes somente à esquerda</target>
+<target>Mostrar ficheiros existentes somente da esquerda</target>
<source>Show files that exist on right side only</source>
-<target>Mostrar ficheiros existentes somente à direita</target>
+<target>Mostrar ficheiros existentes somente da direita</target>
<source>Show files that are newer on left</source>
-<target>Mostrar ficheiros mais recentes à esquerda</target>
+<target>Mostrar ficheiros mais recentes da esquerda</target>
<source>Show files that are newer on right</source>
-<target>Mostrar ficheiros mais recentes à direita</target>
+<target>Mostrar ficheiros mais recentes da direita</target>
<source>Show files that are equal</source>
<target>Mostrar ficheiros iguais</target>
@@ -1394,28 +1511,28 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Mostrar conflitos</target>
<source>Show files that will be created on the left side</source>
-<target>Mostrar ficheiros a ser criados à esquerda</target>
+<target>Mostrar ficheiros a ser criados na esquerda</target>
<source>Show files that will be created on the right side</source>
-<target>Mostrar ficheiros a ser criados à direita</target>
+<target>Mostrar ficheiros a ser criados na direita</target>
<source>Show files that will be deleted on the left side</source>
-<target>Mostrar ficheiros a ser apagados à esquerda</target>
+<target>Mostrar ficheiros a ser apagados na esquerda</target>
<source>Show files that will be deleted on the right side</source>
-<target>Mostrar ficheiros a ser apagados à direita</target>
+<target>Mostrar ficheiros a ser apagados na direita</target>
<source>Show files that will be updated on the left side</source>
-<target>Mostrar ficheiros a ser atualizados à esquerda</target>
+<target>Mostrar ficheiros a ser actualizados na esquerda</target>
<source>Show files that will be updated on the right side</source>
-<target>Mostrar ficheiros a ser atualizados à direita</target>
+<target>Mostrar ficheiros a ser actualizados na direita</target>
<source>Show files that won't be copied</source>
<target>Mostrar ficheiros que não serão copiados</target>
<source>Show filtered or temporarily excluded files</source>
-<target>Mostrar ficheiros filtrados ou temporariamente excluidos</target>
+<target>Mostrar ficheiros filtrados ou temporariamente excluídos</target>
<source>Save as default</source>
<target>Guardar como padrão</target>
@@ -1484,10 +1601,19 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Progresso</target>
<source>Log</source>
-<target>Registo</target>
+<target>Log</target>
-<source>Loading...</source>
-<target>A carregar...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Os ficheiros de instalação estão corrompidos. Por favor, reinstale o FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Obrigado, %x, pela sua doação e suporte!</target>
+
+<source>Password:</source>
+<target>Palavra passe:</target>
+
+<source>Key password:</source>
+<target>Palavra passe da chave:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>&Show</source>
<target>&Mostrar</target>
+<source>Downloading update...</source>
+<target>A descarregar actualização...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identificar ficheiros iguais ao comparar hora de modificação e tamanho.</target>
@@ -1639,14 +1768,35 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Percentage</source>
<target>Percentagem</target>
+<source>Failed to retrieve update information.</source>
+<target>Falha ao obter informação da actualização.</target>
+
+<source>Automatic updates:</source>
+<target>Actualizações automáticas:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Requeri o FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Procurar actualizações do programa</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Actualizar agora ou descarregar manualmente do sítio do FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Actualizar automático</target>
+
+<source>&Home page</source>
+<target>&Sítio da web</target>
+
<source>Download now?</source>
-<target>Fazer download agora?</target>
+<target>Descarregar agora?</target>
+
+<source>&Download</source>
+<target>&Descarregar</target>
<source>FreeFileSync is up to date.</source>
-<target>FreeFileSync está actualizado.</target>
+<target>O FreeFileSync está actualizado.</target>
<source>Cannot find current FreeFileSync version number online. A newer version is likely available. Check manually now?</source>
<target>Não é possível encontrar o número da versão online do FreeFileSync. Uma nova versão deve estar disponível. Verificar manualmente agora?</target>
@@ -1657,14 +1807,20 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Consistency check failed for %x.</source>
<target>Falha na verificação de consistência para %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Não é possível encontrar a função do sistema %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>A instalação foi registrada em um sistema operativo diferente.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Falha ao activar o FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Chave de activação incorrecta.</target>
<source>Unable to register to receive system messages.</source>
<target>Não foi possível registar para receber mensagens do sistema.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Ficheiros de instalação corompidos. Por favor, reinstale o FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Não é possível encontrar a função do sistema %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Não é possível registrar as notificações do dispositivo para %x.</target>
@@ -1696,9 +1852,6 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Cannot copy attributes from %x to %y.</source>
<target>Não é possível copiar os atributos de %x para %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Tipo de item %x não é suportado:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>O ficheiro de instalação %x está incompleto. Os elementos em falta serão definidos para seus valores iniciais.</target>
-<source>Internet access failed.</source>
-<target>Falha ao acessar a Internet.</target>
-
<source>Prepare installation</source>
<target>A preparar a instalação</target>
@@ -1760,7 +1910,7 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<target>Escolha os componentes a instalar.</target>
<source>Select installation type:</source>
-<target>Selecionar tipo de instalação:</target>
+<target>Seleccionar tipo de instalação:</target>
<source>Local</source>
<target>Local</target>
@@ -1822,18 +1972,12 @@ Isto garante um estado consistente mesmo em caso de falha grave.
<source>Edit with FreeFileSync</source>
<target>Editar com FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Obrigado pela sua doação e apoio!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Este instalador do FreeFileSync para doadores atingiu seu limite diário de instalação.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Descarregar a versão normal a partir do sítio da web do FreeFileSync agora?</target>
-
<source>The portable version cannot install into the selected folder.</source>
-<target>Não é possível instalar a versão portátil na pasta selecionada.</target>
+<target>Não é possível instalar a versão portátil na pasta seleccionada.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
-<target>Por favor, escolha o tipo do local de instalação ou selecione uma pasta diferente para instalar.</target>
+<target>Por favor, escolha o tipo do local de instalação ou seleccione uma pasta diferente para instalar.</target>
+
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>A instalação silenciosa somente está disponível no FreeFileSync Donation Edition.</target>
diff --git a/FreeFileSync/Build/Languages/portuguese_br.lng b/FreeFileSync/Build/Languages/portuguese_br.lng
index 8a420222..2b944719 100755
--- a/FreeFileSync/Build/Languages/portuguese_br.lng
+++ b/FreeFileSync/Build/Languages/portuguese_br.lng
@@ -22,12 +22,12 @@
<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 recentes.</target>
-<source>Creating folder %x</source>
-<target>Criando pasta %x</target>
-
<source>Creating file %x</source>
<target>Criando arquivo %x</target>
+<source>Creating folder %x</source>
+<target>Criando pasta %x</target>
+
<source>Creating symbolic link %x</source>
<target>Criando link simbólico %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Se o erro for ignorado, as pastas serão consideradas vazias. Pastas não encontradas serão criadas automaticamentes quando necessário.</target>
-<source>A folder input field is empty.</source>
-<target>Campo de entrada de pasta vazio.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>A pasta correspondente será considerada como vazia.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Os seguintes caminhos de pastas são dependentes um do outro:</target>
-
<source>File %x has an invalid date.</source>
<target>O arquivo %x tem uma data inválida.</target>
<source>Date:</source>
<target>Data:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Os arquivos %x têm a mesma data mas tamanhos diferentes.</target>
+<source>Files have the same date but a different size.</source>
+<target>Os arquivos têm a mesma data mas tamanho diferente.</target>
<source>Size:</source>
<target>Tamanho:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>A comparação por conteúdo foi ignorada para os arquivos excluídos %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>A comparação de conteúdo foi ignorada para os arquivos excluídos.</target>
<source>Items differ in attributes only</source>
<target>Os itens diferem apenas nos atributos</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Iniciando comparação</target>
+<source>A folder input field is empty.</source>
+<target>Campo de entrada de pasta vazio.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>A pasta correspondente será considerada como vazia.</target>
+
+<source>Exclude:</source>
+<target>Excluir:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Uma pasta base de um par de pastas está contida na outra.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>A pasta deve ser excluída da sincronização via filtro.</target>
+
<source>Calculating sync directions...</source>
<target>Calculando as direções de sincronização...</target>
@@ -200,10 +206,10 @@
<target>Item existe apenas no lado direito</target>
<source>Left side is newer</source>
-<target>Lado esquerdo mais recente</target>
+<target>Lado esquerdo é mais recente</target>
<source>Right side is newer</source>
-<target>Lado direito mais recente</target>
+<target>Lado direito é mais recente</target>
<source>Items have different content</source>
<target>Itens têm conteúdos diferentes</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Atualizar atributos à direita</target>
-<source>Cannot write permissions of %x.</source>
-<target>Não é possível escrever as permissões de %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operação não suportada para tipos de pastas de base diferentes.</target>
-
<source>Cannot write file %x.</source>
<target>Não é possível escrever o arquivo %x.</target>
@@ -267,39 +267,45 @@ Esperado: %x bytes
Atual: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Não é possível escrever as permissões de %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operação não suportada para tipos de pastas de base diferentes.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Não é possível copiar o link simbólico %x para %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Não é possível mover o arquivo %x para %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Não é possível enumerar o diretório %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Não é possível conectar a %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Não é possível ler os atributos do arquivo %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Falha na obteção da informação sobre o servidor %x.</target>
-<source>Cannot find %x.</source>
-<target>Não é possível encontrar %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Não é possível abrir o diretório %x.</target>
-<source>Cannot open file %x.</source>
-<target>Não é possível abrir o arquivo %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Não é possível ler o diretório %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Não é possível ler os atributos do arquivo %x.</target>
<source>Cannot read file %x.</source>
<target>Não é possível ler o arquivo %x.</target>
-<source>Cannot find device %x.</source>
-<target>Não é possível encontrar o dispositivo %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Não é possível criar o diretório %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Não é possível apagar o diretório %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Não é possível apagar o arquivo %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Não é possível apagar o diretório %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Não é possível escrever a data de modificação de %x.</target>
@@ -309,23 +315,65 @@ Atual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Não é possível resolver o link simbólico %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Não é possível abrir o diretório %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Não é possível mover %x para a Lixeira.</target>
+
+<source>Cannot open file %x.</source>
+<target>Não é possível abrir o arquivo %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Não é possível encontrar o dispositivo %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Não é possível encontrar %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Tipo de item %x não é suportado:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Não é possível apagar o link simbólico %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Não é possível determinar o espaço livre em disco para %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Não é possível mover %x para a Lixeira.</target>
-
<source>Incorrect command line:</source>
<target>Linha de comando incorreta:</target>
-<source>Error Code %x:</source>
-<target>Código do Erro %x:</target>
+<source>Error Code %x</source>
+<target>Código do Erro %x.</target>
-<source>Unable to connect to %x.</source>
-<target>Não é possível conectar a %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>O servidor não suporta autenticação via %x.</target>
+
+<source>Required:</source>
+<target>Necessário:</target>
+
+<source>Unable to access %x.</source>
+<target>Não foi possível acessar %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>A operação expirou após 1 segundo.</pluralform>
+<pluralform>A operação expirou após %x segundos.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Não é possível esperar mais do que 1 conexão por vez.</pluralform>
+<pluralform>Não é possível esperar mais do que %x conexões por vez.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Conexões ativas: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Falha ao abrir o canal SFTP número %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Atual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>O arquivo de banco de dados %x ainda não existe.</target>
-<source>Database file is corrupt:</source>
-<target>Arquivo de banco de dados corrompido:</target>
+<source>Database file is corrupted:</source>
+<target>O arquivo de banco de dados está corrompido:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Os arquivos de banco de dados ainda não contêm informação sobre a última sincronização.</target>
+
+<source>Loading file %x...</source>
+<target>Carregando arquivo %x...</target>
-<source>Database files do not share a common session.</source>
-<target>Arquivos de banco de dados de sessões diferentes.</target>
+<source>Saving file %x...</source>
+<target>Salvando arquivo %x...</target>
<source>Searching for folder %x...</source>
<target>Buscando pela pasta %x...</target>
@@ -390,9 +444,6 @@ Atual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Detectando travamento abandonado...</target>
-<source>Saving file %x...</source>
-<target>Salvando arquivo %x...</target>
-
<source>Items processed:</source>
<target>Elementos processados:</target>
@@ -647,14 +698,23 @@ O comando é disparado se:
<source>Not enough free disk space available in:</source>
<target>Espaço em disco insuficiente em:</target>
-<source>Required:</source>
-<target>Necessário:</target>
-
<source>Available:</source>
<target>Disponível:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Múltiplos pares de pastas escrevendo em uma mesma subpasta. Favor rever a configuração.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Alguns arquivos serão sincronizados como parte de várias pastas base.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Para evitar conflitos, configure filtros de exclusão para que cada arquivo atualizado seja considerado por apenas uma pasta base.</target>
+
+<source>Versioning folder:</source>
+<target>Pasta de controle de versões:</target>
+
+<source>Base folder:</source>
+<target>Pasta base:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>A pasta de controle de versões será sincronizada pois está contida na pasta base.</target>
<source>Synchronizing folder pair:</source>
<target>Sincronizando par de pastas:</target>
@@ -662,6 +722,9 @@ O comando é disparado se:
<source>Generating database...</source>
<target>Gerando banco de dados...</target>
+<source>Loading...</source>
+<target>Carregando...</target>
+
<source>job name</source>
<target>nome da tarefa</target>
@@ -785,15 +848,6 @@ O comando é disparado se:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Selecione uma pasta em um sistema de arquivos local, de rede ou de um dispositivo MTP.</target>
-<source>SFTP folder</source>
-<target>Pasta SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Selecionar pasta SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Selecionar tipo alternativo de pasta</target>
-
<source>&New</source>
<target>&Novo</target>
@@ -839,11 +893,8 @@ O comando é disparado se:
<source>&Tools</source>
<target>&Ferramentas</target>
-<source>&Check for new version</source>
-<target>&Verificar se existe nova versão</target>
-
-<source>&Check now</source>
-<target>&Verificar agora</target>
+<source>&Check for updates now</source>
+<target>&Verificar atualizações agora</target>
<source>Check &automatically once a week</source>
<target>Verificar &automaticamente uma vez por semana</target>
@@ -863,6 +914,9 @@ O comando é disparado se:
<source>Remove folder pair</source>
<target>Remover par de pastas</target>
+<source>Access online storage</source>
+<target>Acessar armazenamento on-line</target>
+
<source>Swap sides</source>
<target>Inverter lados</target>
@@ -950,9 +1004,6 @@ O comando é disparado se:
<source>Include:</source>
<target>Incluir:</target>
-<source>Exclude:</source>
-<target>Excluir:</target>
-
<source>Show examples</source>
<target>Mostrar exemplos</target>
@@ -969,13 +1020,13 @@ O comando é disparado se:
<target>Máximo:</target>
<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source>
-<target>Selecionar regras de filtro para excluir certos arquivos da sincronização. Inserir os caminhos relativos dos pares de pastas correspondentes.</target>
+<target>Selecione regras de filtro para excluir certos arquivos da sincronização. Insira os caminhos relativos dos pares de pastas correspondentes.</target>
<source>C&lear</source>
<target>&Limpar</target>
<source>Detect synchronization directions with the help of database files</source>
-<target>Detectar a direção de sincronização com a ajuda do arquivo de banco de dados</target>
+<target>Detecta a direção de sincronização com a ajuda do arquivo de banco de dados</target>
<source>Detect moved files</source>
<target>Detectar arquivos movidos</target>
@@ -1036,8 +1087,11 @@ O comando é disparado se:
<source>Arrange folder pair</source>
<target>Organizar par de pastas</target>
-<source>Enter your SFTP login details:</source>
-<target>Inserir os detalhes de login do SFTP:</target>
+<source>Enter your login details:</source>
+<target>Entre com seus dados de login:</target>
+
+<source>Connection type:</source>
+<target>Tipo de conexão:</target>
<source>Server name or IP address:</source>
<target>Nome do servidor ou endereço IP:</target>
@@ -1045,11 +1099,29 @@ O comando é disparado se:
<source>Port:</source>
<target>Porta:</target>
+<source>Encryption:</source>
+<target>Criptografia:</target>
+
+<source>&Disabled</source>
+<target>&Desabilitado</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>SSL/TLS &Explícito</target>
+
+<source>Authentication:</source>
+<target>Autenticação:</target>
+
+<source>&Password</source>
+<target>&Senha</target>
+
+<source>&Key file</source>
+<target>&Arquivo de chave</target>
+
<source>User name:</source>
<target>Nome do usuário:</target>
-<source>Password:</source>
-<target>Senha:</target>
+<source>Private key file:</source>
+<target>Arquivo de chave particular:</target>
<source>&Show password</source>
<target>&Mostrar senha</target>
@@ -1057,6 +1129,27 @@ O comando é disparado se:
<source>Directory on server:</source>
<target>Diretório no servidor:</target>
+<source>Performance improvements:</source>
+<target>Melhorias de desempenho:</target>
+
+<source>How to get best performance?</source>
+<target>Como obter o melhor desempenho?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Conexões SSH para leitura de diretório:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Intervalo sugerido: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Canais SFTP por conexão:</target>
+
+<source>Detect server limit</source>
+<target>Detectar limite do servidor</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 conexões x 10 canais = leitura de diretório 20 vezes mais rápida</target>
+
<source>Select a directory on the server:</source>
<target>Selecionar um diretório no servidor:</target>
@@ -1106,7 +1199,7 @@ O comando é disparado se:
<target>Interromper</target>
<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source>
-<target>Criar um arquivo de tarefa em lote para sincronização desatendida. Para iniciar, dê um clique duplo neste arquivo ou agende no agendador de tarefas: %x</target>
+<target>Cria um arquivo de tarefa em lote para sincronização desatendida. Para iniciar, dê um clique duplo neste arquivo ou agende no agendador de tarefas: %x</target>
<source>&Stop</source>
<target>&Parar</target>
@@ -1186,6 +1279,9 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Source code written in C++ using:</source>
<target>Código-fonte escrito em C++ utilizando:</target>
+<source>Donation details</source>
+<target>Detalhes da doação</target>
+
<source>If you like FreeFileSync:</source>
<target>Se você gosta do FreeFileSync:</target>
@@ -1195,8 +1291,8 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Feedback and suggestions are welcome</source>
<target>Críticas e sugestões são bem-vindas</target>
-<source>Homepage</source>
-<target>Homepage</target>
+<source>Home page</source>
+<target>Página web</target>
<source>Email</source>
<target>E-mail</target>
@@ -1207,8 +1303,26 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Many thanks for localization:</source>
<target>Pela tradução, um agradecimento a:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protocolo de Transferência de Arquivos SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Ative o FreeFileSync Edição do Doador por algum dos seguintes métodos:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Ativar pela internet agora:</target>
+
+<source>Activate online</source>
+<target>Ativar on-line</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Recuperar uma chave de ativação off-line a partir da seguinte URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copiar para área de transferência</target>
+
+<source>Enter activation key:</source>
+<target>Entrar com chave de ativação:</target>
+
+<source>Activate offline</source>
+<target>Ativar off-line</target>
<source>Save as Batch Job</source>
<target>Salvar como Tarefa em Lote</target>
@@ -1225,6 +1339,9 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Select Time Span</source>
<target>Selecionar Intervalo de Tempo</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Edição do Doador</target>
+
<source>&Options</source>
<target>&Opções</target>
@@ -1246,8 +1363,8 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Overview</source>
<target>Parâmetros</target>
-<source>&Download</source>
-<target>&Baixar</target>
+<source>&Show details</source>
+<target>&Mostrar detalhes</target>
<source>A new version of FreeFileSync is available:</source>
<target>Uma nova versão do FreeFileSync está disponível:</target>
@@ -1486,8 +1603,17 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Log</source>
<target>Log</target>
-<source>Loading...</source>
-<target>Carregando...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Os arquivos de instalação estão corrompidos. Por favor reinstale o FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Obrigado, %x, pela sua doação e suporte!</target>
+
+<source>Password:</source>
+<target>Senha:</target>
+
+<source>Key password:</source>
+<target>Senha da chave:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,26 +1672,29 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>&Show</source>
<target>&Mostrar</target>
+<source>Downloading update...</source>
+<target>Baixando atualização...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
-<target>Identificar arquivos iguais comparando modificações na data e no tamanho.</target>
+<target>Identifica arquivos iguais comparando modificações na data e no tamanho.</target>
<source>Identify equal files by comparing the file content.</source>
-<target>Identificar arquivos iguais comparando o conteúdo do arquivo.</target>
+<target>Identifica arquivos iguais comparando o conteúdo do arquivo.</target>
<source>Identify equal files by comparing their file size.</source>
-<target>Identificar arquivos iguais comparando os seus tamanhos.</target>
+<target>Identifica arquivos iguais comparando os seus tamanhos.</target>
<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source>
-<target>Identificar e propagar as alterações em ambos os lados. Arquivos e pastas apagados e/ou movidos e conflitos são detectados automaticamente usando um banco de dados.</target>
+<target>Identifica e propaga as alterações em ambos os lados. Arquivos e pastas apagados e/ou movidos e conflitos são detectados automaticamente usando um banco de dados.</target>
<source>Create a mirror backup of the left folder by adapting the right folder to match.</source>
-<target>Criar uma cópia espelho da pasta da esquerda adaptando a pasta da direita para igualar.</target>
+<target>Cria uma cópia espelho da pasta da esquerda adaptando a pasta da direita para igualar.</target>
<source>Copy new and updated files to the right folder.</source>
-<target>Copiar arquivos novos ou atualizados para a pasta da direita.</target>
+<target>Copia arquivos novos ou atualizados para a pasta da direita.</target>
<source>Configure your own synchronization rules.</source>
-<target>Configurar as suas próprias regras de sincronização.</target>
+<target>Configure as suas próprias regras de sincronização.</target>
<source>Synchronization Settings</source>
<target>Configurações de Sincronização</target>
@@ -1639,12 +1768,33 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Percentage</source>
<target>Percentual</target>
+<source>Failed to retrieve update information.</source>
+<target>Falha na obteção de informação sobre atualização.</target>
+
+<source>Automatic updates:</source>
+<target>Atualizações automáticas:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Requer FreeFileSync Edição do Doador</target>
+
<source>Check for Program Updates</source>
<target>Verificar se existem atualizações</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Atualizar automaticamente agora ou baixar manualmente pela página web do FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Atualização automática</target>
+
+<source>&Home page</source>
+<target>&Página web</target>
+
<source>Download now?</source>
<target>Baixar agora?</target>
+<source>&Download</source>
+<target>&Baixar</target>
+
<source>FreeFileSync is up to date.</source>
<target>O FreeFileSync está atualizado.</target>
@@ -1657,14 +1807,20 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Consistency check failed for %x.</source>
<target>Verificação de consistência falhou para %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Não é possível localizar a função de sistema %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>A instalação foi registrada em um sistema operacional diferente.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Falha na ativação do FreeFileSync Edição do Doador.</target>
+
+<source>Incorrect activation key.</source>
+<target>Chave de ativação incorreta.</target>
<source>Unable to register to receive system messages.</source>
<target>Não é possível registrar para receber mensagens do sistema.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Arquivos de instalação corrompidos. Reinstale o FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Não é possível localizar a função de sistema %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Não é possível registrar notificações para %x.</target>
@@ -1696,9 +1852,6 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Cannot copy attributes from %x to %y.</source>
<target>Não é possível copiar os atributos de %x para %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Tipo de item %x não é suportado:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,14 +1903,11 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Arquivo de configuração %x incompleto. Os elementos faltantes serão configurados com seus valores padrões.</target>
-<source>Internet access failed.</source>
-<target>Acesso à internet falhou.</target>
-
<source>Prepare installation</source>
<target>Preparando a instalação</target>
<source>Choose which components you want to install.</source>
-<target>Escolher os componentes a serem instalados.</target>
+<target>Escolha os componentes a serem instalados.</target>
<source>Select installation type:</source>
<target>Selecionar o tipo de instalação:</target>
@@ -1790,7 +1940,7 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<target>Apenas copiar os arquivos</target>
<source>Choose a directory for installation:</source>
-<target>Escolhar um diretório para a instalação:</target>
+<target>Escolher um diretório para a instalação:</target>
<source>Create shortcuts:</source>
<target>Criar atalhos:</target>
@@ -1822,18 +1972,12 @@ Isto garante um estado consistente mesmo em caso de erro grave.
<source>Edit with FreeFileSync</source>
<target>Editar com FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Obrigado pela sua doação e suporte!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>O instalador do FreeFileSync para doadores alcançou o limite diário de instalações.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Baixar a versão regular no site do FreeFileSync agora?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>A versão portátil não pode ser instalada na pasta selecionada.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Escolha o tipo de instalação local ou selecione uma pasta diferente para instalação.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>O modo silencioso de instalação está disponível apenas no FreeFileSync Edição do Doador.</target>
+
diff --git a/FreeFileSync/Build/Languages/romanian.lng b/FreeFileSync/Build/Languages/romanian.lng
index 02f931e8..17ae5545 100755
--- a/FreeFileSync/Build/Languages/romanian.lng
+++ b/FreeFileSync/Build/Languages/romanian.lng
@@ -22,12 +22,12 @@
<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ă direcția implicită de sincronizare: Filele vechi vor fi suprascrise de cele noi.</target>
-<source>Creating folder %x</source>
-<target>Creez dosarul %x</target>
-
<source>Creating file %x</source>
<target>Creez fila %x</target>
+<source>Creating folder %x</source>
+<target>Creez dosarul %x</target>
+
<source>Creating symbolic link %x</source>
<target>Creez legătura simbolică %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Dacă această eroare este ignorată, dosarele lipsă vor fi considerate goale. Dosarele lipsă vor fi create automat la nevoie.</target>
-<source>A folder input field is empty.</source>
-<target>Un cîmp de introducere a dosarului este gol.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Dosarul corespondent va fi considerat ca fiind gol.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Următoarele căi de dosare sînt dependente una de alta:</target>
-
<source>File %x has an invalid date.</source>
<target>Fila %x are o dată nevalidă.</target>
<source>Date:</source>
<target>Dată:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Filele %x au dată identică, dar mărime diferită.</target>
+<source>Files have the same date but a different size.</source>
+<target>Filele au aceeași dată, dar mărime diferită.</target>
<source>Size:</source>
<target>Mărime:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Compararea conținutului a fost sărită pentru filele excluse %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Compararea conținutului a fost sărită pentru filele excluse.</target>
<source>Items differ in attributes only</source>
<target>Elementele diferă doar prin atributele lor</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Pornesc compararea</target>
+<source>A folder input field is empty.</source>
+<target>Un cîmp de introducere a dosarului este gol.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Dosarul corespondent va fi considerat ca fiind gol.</target>
+
+<source>Exclude:</source>
+<target>Excluse:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Un dosar de bază din perechea de dosare e conținut în celălalt.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Dosarul trebuie exclus din sincronizare prin filtru.</target>
+
<source>Calculating sync directions...</source>
<target>Calculez acțiunile de sincronizare...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Actualizează atributele în partea dreaptă</target>
-<source>Cannot write permissions of %x.</source>
-<target>Nu pot scrie permisiunile lui %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operație nesuportată pentru tipuri diferite de dosare bază (rădăcină).</target>
-
<source>Cannot write file %x.</source>
<target>Nu pot scrie fila %x.</target>
@@ -267,6 +267,12 @@ Așteptată: %x baiți
Actuală: %y baiți
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Nu pot scrie permisiunile lui %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operație nesuportată pentru tipuri diferite de dosare bază (rădăcină).</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Nu pot copia legătura simbolică %x în %y.</target>
@@ -276,36 +282,30 @@ Actuală: %y baiți
<source>Unable to connect to %x.</source>
<target>Nu mă pot conecta la %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>N-am putut obține informații despre serverul %x.</target>
+
<source>Cannot open directory %x.</source>
<target>Nu pot deschide dosarul %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Nu pot enumera dosarul %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Nu pot citi dosarul %x.</target>
<source>Cannot read file attributes of %x.</source>
<target>Nu pot citi atributele filei %x.</target>
-<source>Cannot find %x.</source>
-<target>Nu pot găsi %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Nu pot deschide fila %x.</target>
-
<source>Cannot read file %x.</source>
<target>Nu pot citi fila %x.</target>
-<source>Cannot find device %x.</source>
-<target>Nu pot găsi dispozitivul %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Nu pot crea dosarul %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Nu pot șterge dosarul %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Nu pot șterge fila %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Nu pot șterge dosarul %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Nu pot scrie modificarea timpului pentru %x.</target>
@@ -315,15 +315,68 @@ Actuală: %y baiți
<source>Cannot resolve symbolic link %x.</source>
<target>Nu pot rezolva legătura simbolică %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Nu pot determina spațiul liber de stocare pentru %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Nu pot muta %x în Reciclator.</target>
+<source>Cannot open file %x.</source>
+<target>Nu pot deschide fila %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Nu pot găsi dispozitivul %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Nu pot găsi %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Tipul de element %x nu e suportat:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Nu pot șterge legătura simbolică %x.</target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Nu pot determina spațiul liber de stocare pentru %x.</target>
+
<source>Incorrect command line:</source>
<target>Linie de comandă incorectă:</target>
+<source>Error Code %x</source>
+<target>Cod de Eroare %x.</target>
+
+<source>The server does not support authentication via %x.</source>
+<target>Serverul nu suportă autentificarea prin %x.</target>
+
+<source>Required:</source>
+<target>Necesar:</target>
+
+<source>Unable to access %x.</source>
+<target>Nu pot accesa %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Operație expirată după 1 secundă.</pluralform>
+<pluralform>Operație expirată după %x secunde.</pluralform>
+<pluralform>Operație expirată după %x de secunde.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Nu pot aștepta după mai mult de 1 conexiune simultan.</pluralform>
+<pluralform>Nu pot aștepta după mai mult de %x conexiuni simultan.</pluralform>
+<pluralform>Nu pot aștepta după mai mult de %x de conexiuni simultan.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Conexiuni Active: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>N-am putut deschide canalul SFTP cu numărul %x.</target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -355,11 +408,17 @@ Actuală: %y baiți
<source>Database file %x does not yet exist.</source>
<target>Fila cu baza de date %x nu există încă.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Fila bazei de date este stricată (coruptă):</target>
-<source>Database files do not share a common session.</source>
-<target>Filele cu baze de date nu partajează o sesiune comună.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Filele cu baze de date nu conțin încă informații despre ultima sincornizare.</target>
+
+<source>Loading file %x...</source>
+<target>Deschid fila %x...</target>
+
+<source>Saving file %x...</source>
+<target>Salvez fila %x...</target>
<source>Searching for folder %x...</source>
<target>Caut dosarul %x...</target>
@@ -389,9 +448,6 @@ Actuală: %y baiți
<source>Detecting abandoned lock...</source>
<target>Detectez zăvorîrea [lock] abandonată...</target>
-<source>Saving file %x...</source>
-<target>Salvez fila %x...</target>
-
<source>Items processed:</source>
<target>Elemente Procesate:</target>
@@ -647,14 +703,23 @@ Comanda este declanșată dacă:
<source>Not enough free disk space available in:</source>
<target>Spațiu de stocare insuficient pe:</target>
-<source>Required:</source>
-<target>Necesar:</target>
-
<source>Available:</source>
<target>Disponibil:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Mai multe perechi de dosare scriu într-un subdosar comun. Revezi configurația.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Anumite file vor fi sincronizate ca parte din dosare de bază multiple.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Pentru a evita conflictele, setează filtrele de excludere astfel ca fiecare filă actualizată e considerată ca aparținînd unui singur dosar de bază.</target>
+
+<source>Versioning folder:</source>
+<target>Dosar de Versionare:</target>
+
+<source>Base folder:</source>
+<target>Dosar de Bază:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Dosarul de versionare va fi actualizat pentru că e conținut într-un dosar de bază.</target>
<source>Synchronizing folder pair:</source>
<target>Sincronizez perechea de dosare:</target>
@@ -662,6 +727,9 @@ Comanda este declanșată dacă:
<source>Generating database...</source>
<target>Generez baza de date...</target>
+<source>Loading...</source>
+<target>Deschid...</target>
+
<source>job name</source>
<target>numele sarcinii</target>
@@ -786,15 +854,6 @@ Comanda este declanșată dacă:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Selectează un dosar de pe un sistem de file local, din rețea sau de pe un dispozitiv MTP (dispozitiv media portabil).</target>
-<source>SFTP folder</source>
-<target>Dosar SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Selectează un Dosar SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Selectează tipul de dosar alternativ</target>
-
<source>&New</source>
<target>Configurație &Nouă</target>
@@ -840,11 +899,8 @@ Comanda este declanșată dacă:
<source>&Tools</source>
<target>&Unelte</target>
-<source>&Check for new version</source>
-<target>Caută &Versiune Nouă</target>
-
-<source>&Check now</source>
-<target>&Caută Acum</target>
+<source>&Check for updates now</source>
+<target>&Caută Actualizări Acum</target>
<source>Check &automatically once a week</source>
<target>Caută &Automat Săptămînal</target>
@@ -864,6 +920,9 @@ Comanda este declanșată dacă:
<source>Remove folder pair</source>
<target>Înlătură Perechea de Dosare</target>
+<source>Access online storage</source>
+<target>Accesează stocarea de pe internet [online]</target>
+
<source>Swap sides</source>
<target>Schimbă compartimentele stîng și drept între ele</target>
@@ -951,9 +1010,6 @@ Comanda este declanșată dacă:
<source>Include:</source>
<target>Incluse:</target>
-<source>Exclude:</source>
-<target>Excluse:</target>
-
<source>Show examples</source>
<target>Arată exemple</target>
@@ -1037,8 +1093,11 @@ Comanda este declanșată dacă:
<source>Arrange folder pair</source>
<target>Aranjează perechea de dosare</target>
-<source>Enter your SFTP login details:</source>
-<target>Introdu detaliile tale de logare la serverul SFTP:</target>
+<source>Enter your login details:</source>
+<target>Introdu detaliile de logare:</target>
+
+<source>Connection type:</source>
+<target>Tip de Conexiune:</target>
<source>Server name or IP address:</source>
<target>Numele Serverului sau Adresa IP:</target>
@@ -1046,11 +1105,29 @@ Comanda este declanșată dacă:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Criptare:</target>
+
+<source>&Disabled</source>
+<target>&Dezactivat</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>SSL/TLS &Explicit</target>
+
+<source>Authentication:</source>
+<target>Autentificare:</target>
+
+<source>&Password</source>
+<target>&Parolă</target>
+
+<source>&Key file</source>
+<target>Filă C&heie</target>
+
<source>User name:</source>
<target>Utilizator:</target>
-<source>Password:</source>
-<target>Parolă:</target>
+<source>Private key file:</source>
+<target>Fila cu Cheia Privată:</target>
<source>&Show password</source>
<target>&Arată parola</target>
@@ -1058,6 +1135,27 @@ Comanda este declanșată dacă:
<source>Directory on server:</source>
<target>Dosarul de pe server:</target>
+<source>Performance improvements:</source>
+<target>Îmbunătățiri de Performanță:</target>
+
+<source>How to get best performance?</source>
+<target>Cum obții cea mai bună performanță?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Conexiuni SSH pentru citirea dosarelor:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Interval sugerat: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Canale SFTP per conexiune:</target>
+
+<source>Detect server limit</source>
+<target>Detectează limita serverului</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 conexiuni x 10 canale = citire a dosarelor de 20 de ori mai rapidă</target>
+
<source>Select a directory on the server:</source>
<target>Selectează un dosar de pe server:</target>
@@ -1187,6 +1285,9 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Source code written in C++ using:</source>
<target>Cod sursă scris în C++ folosind:</target>
+<source>Donation details</source>
+<target>Detaliile Donăriii</target>
+
<source>If you like FreeFileSync:</source>
<target>Donează pentru FreeFileSync:</target>
@@ -1196,8 +1297,8 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Feedback and suggestions are welcome</source>
<target>Opiniile și sugestiile despre program sînt binevenite.</target>
-<source>Homepage</source>
-<target>Situl Softului</target>
+<source>Home page</source>
+<target>Pagina Sitului</target>
<source>Email</source>
<target>Adresa Autorului</target>
@@ -1208,8 +1309,26 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Many thanks for localization:</source>
<target>Multe mulțumiri pentru localizare:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protocol de Transfer al Filelor SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Activează FreeFileSync Ediția pentru Donatori prin una din următoarele metode:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Activatează prin internet acum:</target>
+
+<source>Activate online</source>
+<target>Activatează prin internet [online]</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Preia o cheie de activare neconectată [offline] de la adresa următoare:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copiază în cliplanșetă [clipboard]</target>
+
+<source>Enter activation key:</source>
+<target>Introdu cheia de activare:</target>
+
+<source>Activate offline</source>
+<target>Activează neconectat [offline]</target>
<source>Save as Batch Job</source>
<target>Salvează ca Sarcină Set</target>
@@ -1226,6 +1345,9 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Select Time Span</source>
<target>Selectează Intervalul de Timp</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Ediție pentru Donatori</target>
+
<source>&Options</source>
<target>&Opțiuni</target>
@@ -1247,8 +1369,8 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Overview</source>
<target>Panoramă</target>
-<source>&Download</source>
-<target>&Descarcă</target>
+<source>&Show details</source>
+<target>&Arată Detalii</target>
<source>A new version of FreeFileSync is available:</source>
<target>Este disponibilă o versiune nouă de FreeFileSync:</target>
@@ -1491,8 +1613,17 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Log</source>
<target>Jurnal</target>
-<source>Loading...</source>
-<target>Deschid...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Filele de instalare sînt stricate (corupte). Reinstalează FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Mulțumesc %x, pentru donație și sprijin!</target>
+
+<source>Password:</source>
+<target>Parolă:</target>
+
+<source>Key password:</source>
+<target>Parola Cheie:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1554,6 +1685,9 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>&Show</source>
<target>&Arată</target>
+<source>Downloading update...</source>
+<target>Descarc actualizarea...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Filele identice sînt descoperite prin compararea timpului modificării și a mărimii lor.</target>
@@ -1647,12 +1781,33 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Percentage</source>
<target>Procent</target>
+<source>Failed to retrieve update information.</source>
+<target>N-am putut prelua informațiile despre actualizare.</target>
+
+<source>Automatic updates:</source>
+<target>Actualizări Automate:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Necesită FreeFileSync Ediția pentru Donatori</target>
+
<source>Check for Program Updates</source>
<target>Caută Actualizări ale Programului</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Actualizez automat acum sau descarci manual de pe situl softului FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Actualizează Automat</target>
+
+<source>&Home page</source>
+<target>&Situl Softului</target>
+
<source>Download now?</source>
<target>Vrei s-o descarci acum ?</target>
+<source>&Download</source>
+<target>&Descarcă</target>
+
<source>FreeFileSync is up to date.</source>
<target>Ai deja ultima versiune de FreeFileSync.</target>
@@ -1665,14 +1820,20 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Consistency check failed for %x.</source>
<target>Verificarea consecvenței datelor a eșuat pentru %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Nu pot găsi funcția de sistem %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Instalarea a fost înregistrată pe un sistem de operare diferit.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>N-am putut activa FreeFileSync Ediția pentru Donatori.</target>
+
+<source>Incorrect activation key.</source>
+<target>Cheie de activare incorectă.</target>
<source>Unable to register to receive system messages.</source>
<target>Nu pot înregistra softul pentru a primi mesaje de la sistemul de operare.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Pachetul de instalare este stricat (corupt). Reinstalează FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Nu pot găsi funcția de sistem %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nu pot înregistra notificările dispozitivului pentru %x.</target>
@@ -1704,9 +1865,6 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Cannot copy attributes from %x to %y.</source>
<target>Nu pot copia atributele de pe %x pe %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Tipul de element %x nu e suportat:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1752,9 +1910,6 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Cannot change process I/O priorities.</source>
<target>Nu pot schimba prioritățile I/O ale procesului.</target>
-<source>Error Code %x:</source>
-<target>Cod de Eroare %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Verificarea disponibilității Reciclatorului a eșuat pentru dosarul %x.</target>
@@ -1764,9 +1919,6 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Fila configurație %x este incompletă. Elementele lipsă vor fi setate la valorile implicite.</target>
-<source>Internet access failed.</source>
-<target>Accesul la internet a eșuat.</target>
-
<source>Prepare installation</source>
<target>Pregătirea Instalării</target>
@@ -1836,18 +1988,12 @@ Aceasta garantează consecvența stării filelor chiar și în cazul apariției
<source>Edit with FreeFileSync</source>
<target>Editează cu FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Mulțumiri pentru donația și sprijinul tău!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Acest instalator FreeFileSync pentru donatori și-a atins limita zilnică de instalări permise.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Descarci acum versiunea obișnuită de pe situl FreeFileSync?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Versiunea portabilă nu poate fi instalată în dosarul selectat.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Alege instalarea locală sau selectează un dosar diferit pentru instalare.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Modul de instalare silențios e disponibil doar pentru FreeFileSync Ediția pentru Donatori.</target>
+
diff --git a/FreeFileSync/Build/Languages/russian.lng b/FreeFileSync/Build/Languages/russian.lng
index 3933e8bb..f5bf30b9 100755
--- a/FreeFileSync/Build/Languages/russian.lng
+++ b/FreeFileSync/Build/Languages/russian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Настройка направления синхронизации по умолчанию: Старые файлы будут перезаписаны более новыми файлами.</target>
-<source>Creating folder %x</source>
-<target>Создание папки %x</target>
-
<source>Creating file %x</source>
<target>Создание файла %x</target>
+<source>Creating folder %x</source>
+<target>Создание папки %x</target>
+
<source>Creating symbolic link %x</source>
<target>Создание символьной ссылки %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Если эта ошибка будет проигнорирована, то папки выше будут рассматриваться как пустые. Недостающие папки создаются автоматически, когда это необходимо.</target>
-<source>A folder input field is empty.</source>
-<target>Поле ввода папки пустое.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Соответствующая папка будет считаться пустой.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Следующие пути папок зависят друг от друга:</target>
-
<source>File %x has an invalid date.</source>
<target>Файл %x имеет недействительную дату.</target>
<source>Date:</source>
<target>Дата:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Файлы %x имеют одинаковую дату, но различаются по размеру.</target>
+<source>Files have the same date but a different size.</source>
+<target>Файлы имеют одинаковую дату, но различаются по размеру.</target>
<source>Size:</source>
<target>Размер:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Сравнение содержания было пропущено для исключенного файла %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Сравнение содержания было пропущено для исключенных файлов.</target>
<source>Items differ in attributes only</source>
<target>Элементы различаются только атрибутами</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Начать сравнение</target>
+<source>A folder input field is empty.</source>
+<target>Поле ввода папки пустое.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Соответствующая папка будет считаться пустой.</target>
+
+<source>Exclude:</source>
+<target>Исключить:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Одна базовая папка из пары папок содержится в другой папке.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Папка должна быть исключена из синхронизации с помощью фильтра.</target>
+
<source>Calculating sync directions...</source>
<target>Расчет направлений синхронизации...</target>
@@ -215,10 +221,10 @@
<target>Конфликт/элемент невозможно отнести к какой-либо категории</target>
<source>Copy new item to left</source>
-<target>Скопировать новый элемент налево</target>
+<target>Копировать новый элемент налево</target>
<source>Copy new item to right</source>
-<target>Скопировать новый элемент направо</target>
+<target>Копировать новый элемент направо</target>
<source>Delete left item</source>
<target>Удалить элемент слева</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Обновление атрибутов справа</target>
-<source>Cannot write permissions of %x.</source>
-<target>Невозможно записать права доступа %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Операция не поддерживается для разных базовых типов папок.</target>
-
<source>Cannot write file %x.</source>
<target>Невозможно записать файл %x.</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
Фактический: %y байт
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Невозможно записать права доступа %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Операция не поддерживается для разных базовых типов папок.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Невозможно скопировать символьную ссылку %x в %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Невозможно перенести файл %x в %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Невозможно прочесть папку %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Невозможно соединиться с %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Невозможно прочитать атрибуты файла %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Не удалось получить информацию о сервере %x.</target>
-<source>Cannot find %x.</source>
-<target>Невозможно найти %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Невозможно открыть папку %x.</target>
-<source>Cannot open file %x.</source>
-<target>Невозможно открыть файл %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Невозможно прочитать папку %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>Невозможно прочитать атрибуты файла %x.</target>
<source>Cannot read file %x.</source>
<target>Невозможно прочитать файл %x.</target>
-<source>Cannot find device %x.</source>
-<target>Невозможно найти устройство %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Невозможно создать папку %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Невозможно удалить папку %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Невозможно удалить файл %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Невозможно удалить папку %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Невозможно записать время изменения файла %x.</target>
@@ -309,23 +315,67 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Невозможно разрешить символьную ссылку %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Невозможно открыть папку %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Невозможно переместить %x в "Корзину".</target>
+
+<source>Cannot open file %x.</source>
+<target>Невозможно открыть файл %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Невозможно найти устройство %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Невозможно найти %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Тип элемента %x не поддерживается:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Невозможно удалить символьную ссылку %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Невозможно определить свободное место на диске для %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Невозможно переместить %x в "Корзину".</target>
-
<source>Incorrect command line:</source>
<target>Неверная командная строка:</target>
-<source>Error Code %x:</source>
-<target>Код ошибки %x:</target>
+<source>Error Code %x</source>
+<target>Код ошибки %x</target>
-<source>Unable to connect to %x.</source>
-<target>Невозможно соединиться с %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Сервер не поддерживает аутентификацию с помощью %x.</target>
+
+<source>Required:</source>
+<target>Требуется:</target>
+
+<source>Unable to access %x.</source>
+<target>Невозможно получить доступ к %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Время ожидания соединения истекает через %x сукунду.</pluralform>
+<pluralform>Время ожидания соединения истекает через %x сукунды.</pluralform>
+<pluralform>Время ожидания соединения истекает через %x сукунд.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Невозможно обработать более %x соединения за раз.</pluralform>
+<pluralform>Невозможно обработать более %x соединений за раз.</pluralform>
+<pluralform>Невозможно обработать более %x соединений за раз.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Активные соединения: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Не удалось открыть SFTP канал номер %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -358,11 +408,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Файл базы данных %x еще не существует.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Файл базы данных поврежден:</target>
-<source>Database files do not share a common session.</source>
-<target>Файлы баз данных не имеют общей сессии.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Файлы базы данных еще не содержат информацию о последней синхронизации.</target>
+
+<source>Loading file %x...</source>
+<target>Загрузка файла %x...</target>
+
+<source>Saving file %x...</source>
+<target>Сохранение файла %x...</target>
<source>Searching for folder %x...</source>
<target>Поиск папки %x...</target>
@@ -392,9 +448,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Обнаружение заброшенной блокировки...</target>
-<source>Saving file %x...</source>
-<target>Сохранение файла %x...</target>
-
<source>Items processed:</source>
<target>Элементов обработано:</target>
@@ -481,7 +534,7 @@ Actual: %y bytes
<target>&Справка</target>
<source>&About</source>
-<target>&О программе</target>
+<target>О &программе</target>
<source>&Help</source>
<target>&Помощь</target>
@@ -650,14 +703,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Не достаточно свободного места в:</target>
-<source>Required:</source>
-<target>Требуется:</target>
-
<source>Available:</source>
<target>Доступно:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Несколько пар папок пишут в общую папку. Пожалуйста, проверьте конфигурацию.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Некоторые файлы будут синхронизированы как часть нескольких базовых папок.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Чтобы избежать конфликтов, настройте фильтры исключения так, чтобы каждый обновленный файл учитывался только одной базовой папкой.</target>
+
+<source>Versioning folder:</source>
+<target>Папка для архивирования файлов:</target>
+
+<source>Base folder:</source>
+<target>Базовая папка:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Папка для архивирования файлов будет синхронизирована, поскольку она содержится в базовой папке.</target>
<source>Synchronizing folder pair:</source>
<target>Синхронизация пары папок:</target>
@@ -665,6 +727,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Создание базы данных...</target>
+<source>Loading...</source>
+<target>Загрузка...</target>
+
<source>job name</source>
<target>название</target>
@@ -789,15 +854,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Пожалуйста, выберите папку в локальной файловой системе, сети или MTP устройстве.</target>
-<source>SFTP folder</source>
-<target>Папка SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Выберите папку SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Выберите альтернативный тип папки</target>
-
<source>&New</source>
<target>&Новая</target>
@@ -843,11 +899,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&Инструменты</target>
-<source>&Check for new version</source>
-<target>&Проверка обновлений</target>
-
-<source>&Check now</source>
-<target>&Проверить сейчас</target>
+<source>&Check for updates now</source>
+<target>Проверить наличие &обновлений сейчас</target>
<source>Check &automatically once a week</source>
<target>Проверять &автоматически раз в неделю</target>
@@ -867,6 +920,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>Удалить пару папок</target>
+<source>Access online storage</source>
+<target>Доступ к онлайн-хранилищу</target>
+
<source>Swap sides</source>
<target>Поменять направление</target>
@@ -954,9 +1010,6 @@ The command is triggered if:
<source>Include:</source>
<target>Включить:</target>
-<source>Exclude:</source>
-<target>Исключить:</target>
-
<source>Show examples</source>
<target>Показать примеры</target>
@@ -1040,8 +1093,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Упорядочить пару папок</target>
-<source>Enter your SFTP login details:</source>
-<target>Введите свои регистрационные данные SFTP:</target>
+<source>Enter your login details:</source>
+<target>Введите свои данные для входа:</target>
+
+<source>Connection type:</source>
+<target>Тип соединения:</target>
<source>Server name or IP address:</source>
<target>Имя сервера или IP адрес:</target>
@@ -1049,18 +1105,57 @@ The command is triggered if:
<source>Port:</source>
<target>Порт:</target>
+<source>Encryption:</source>
+<target>Шифрование:</target>
+
+<source>&Disabled</source>
+<target>&Запрещено</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Явный SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Аутентификация:</target>
+
+<source>&Password</source>
+<target>&Пароль</target>
+
+<source>&Key file</source>
+<target>&Файл ключа</target>
+
<source>User name:</source>
<target>Имя пользователя:</target>
-<source>Password:</source>
-<target>Пароль:</target>
+<source>Private key file:</source>
+<target>Файл закрытого ключа:</target>
<source>&Show password</source>
-<target>&Показать пароль</target>
+<target>П&оказать пароль</target>
<source>Directory on server:</source>
<target>Папка на сервере:</target>
+<source>Performance improvements:</source>
+<target>Повышение производительности:</target>
+
+<source>How to get best performance?</source>
+<target>Как получить лучшую производительность?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Количество SSH соединений:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Рекомендуемый диапазон: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Количество SFTP каналов на одно соединение:</target>
+
+<source>Detect server limit</source>
+<target>Выявить лимит сервера</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 соединения x 10 каналов = в 20 раз быстрее чтение папок</target>
+
<source>Select a directory on the server:</source>
<target>Выберите папку на сервере:</target>
@@ -1190,6 +1285,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Исходный код написан на C++ с использованием:</target>
+<source>Donation details</source>
+<target>Детали оплаты</target>
+
<source>If you like FreeFileSync:</source>
<target>Если Вам понравился FreeFileSync:</target>
@@ -1199,8 +1297,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Замечания и предложения приветствуются</target>
-<source>Homepage</source>
-<target>Оф.сайт</target>
+<source>Home page</source>
+<target>Домашняя страница</target>
<source>Email</source>
<target>Почта</target>
@@ -1211,8 +1309,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Большое спасибо за перевод:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH протокол передачи файлов</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Активировать платную версию FreeFileSync одним из следующих способов:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Активировать через интернет сейчас:</target>
+
+<source>Activate online</source>
+<target>Активировать онлайн</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Получить автономный ключ активации со следующего URL-адреса:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Копировать в буфер обмена</target>
+
+<source>Enter activation key:</source>
+<target>Введите ключ активации:</target>
+
+<source>Activate offline</source>
+<target>Активировать в офлайн режиме</target>
<source>Save as Batch Job</source>
<target>Сохранение пакетного задания</target>
@@ -1229,6 +1345,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Выбор промежутка времени</target>
+<source>FreeFileSync Donation Edition</source>
+<target>Платная версия FreeFileSync</target>
+
<source>&Options</source>
<target>&Настройки</target>
@@ -1250,8 +1369,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Главная</target>
-<source>&Download</source>
-<target>&Загрузить</target>
+<source>&Show details</source>
+<target>&Показать детали</target>
<source>A new version of FreeFileSync is available:</source>
<target>Доступна новая версия FreeFileSync:</target>
@@ -1494,17 +1613,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Лог (журнал)</target>
-<source>Loading...</source>
-<target>Загрузка...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Установочные файлы повреждены. Переустановите FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Благодарим вас, %x, за пожертвование и поддержку!</target>
+
+<source>Password:</source>
+<target>Пароль:</target>
+
+<source>Key password:</source>
+<target>Пароль:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
<pluralform>Copy the following %x items to another folder?</pluralform>
</source>
<target>
-<pluralform>Скопировать следующий %x элемент в другую папку?</pluralform>
-<pluralform>Скопировать следующие %x элемента в другую папку?</pluralform>
-<pluralform>Скопировать следующие %x элементов в другую папку?</pluralform>
+<pluralform>Копировать следующий %x элемент в другую папку?</pluralform>
+<pluralform>Копировать следующие %x элемента в другую папку?</pluralform>
+<pluralform>Копировать следующие %x элементов в другую папку?</pluralform>
</target>
<source>Please enter a target folder.</source>
@@ -1557,6 +1685,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Показать</target>
+<source>Downloading update...</source>
+<target>Загрузка обновления...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Определять одинаковые файлы путем сравнения времени изменения и размера.</target>
@@ -1650,12 +1781,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Проценты</target>
+<source>Failed to retrieve update information.</source>
+<target>Не удалось получить информацию об обновлении.</target>
+
+<source>Automatic updates:</source>
+<target>Автоматические обновления:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Требуется платная версия FreeFileSync</target>
+
<source>Check for Program Updates</source>
<target>Проверка обновления программы</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Обновить автоматически сейчас или загрузить вручную с домашней страницы FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Автоматическое обновление</target>
+
+<source>&Home page</source>
+<target>&Домашняя страница</target>
+
<source>Download now?</source>
<target>Загрузить сейчас?</target>
+<source>&Download</source>
+<target>&Загрузить</target>
+
<source>FreeFileSync is up to date.</source>
<target>У Вас самая последняя версия FreeFileSync.</target>
@@ -1668,20 +1820,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Последовательная проверка не удалась для %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Невозможно найти системную функцию %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Установка была зарегистрирована в другой операционной системе.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Не удалось активировать платную версию FreeFileSync.</target>
+
+<source>Incorrect activation key.</source>
+<target>Недействительный ключ активации.</target>
<source>Unable to register to receive system messages.</source>
<target>Невозможно зарегистрироваться для получения системных сообщений.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Установочные файлы повреждены. Пожалуйста, переустановите FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Невозможно найти системную функцию %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Не удалось зарегистрировать уведомления устройств для %x.</target>
<source>Cannot monitor directory %x.</source>
-<target>Невозможно наблюдать папку %x.</target>
+<target>Невозможно отследить папку %x.</target>
<source>The file is locked by another process:</source>
<target>Файл заблокирован другим процессом:</target>
@@ -1707,9 +1865,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Невозможно скопировать атрибуты от %x к %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Тип элемента %x не поддерживается:</target>
-
<source>%x TB</source>
<target>%x ТБ</target>
@@ -1764,9 +1919,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Файл конфигурации %x является неполным. Недостающие элементы будут установлены в значения по умолчанию.</target>
-<source>Internet access failed.</source>
-<target>Отсутствует доступ в Интернет.</target>
-
<source>Prepare installation</source>
<target>Подготовка установки</target>
@@ -1836,18 +1988,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Редактировать с помощью FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Спасибо за Ваше пожертвование и поддержку!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Этот установщик FreeFileSync для доноров достиг дневного лимита установок.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Загрузить обычную версию с домашней страницы FreeFileSync сейчас?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Портативная версия не может быть установлена в выбранную папку.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Пожалуйста, выберите локальный тип установки или выберите другую папку для установки.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Режим автоматической установки доступен только в платной версии FreeFileSync.</target>
+
diff --git a/FreeFileSync/Build/Languages/serbian.lng b/FreeFileSync/Build/Languages/serbian.lng
index 5224f3cd..12e56174 100755
--- a/FreeFileSync/Build/Languages/serbian.lng
+++ b/FreeFileSync/Build/Languages/serbian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Постављам подразумеване синхронизацијске смерове: Старе датотеке биће замењене новијим датотекама.</target>
-<source>Creating folder %x</source>
-<target>Креирам фолдер %x</target>
-
<source>Creating file %x</source>
<target>Правим датотеку %x</target>
+<source>Creating folder %x</source>
+<target>Креирам фолдер %x</target>
+
<source>Creating symbolic link %x</source>
<target>Креирам симболичну везу %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Ако се ова грешка игнорише фолдери ће се сматрати празним. Недостајући фолдери креираће се аутоматски по потреби.</target>
-<source>A folder input field is empty.</source>
-<target>Поље за одабир фолдера је празно.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Одговарајући фолдер сматраће се празним.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Следећи фолдерски парови зависни су један од другог:</target>
-
<source>File %x has an invalid date.</source>
<target>Датотека %x има невалидни датум.</target>
<source>Date:</source>
<target>Датум:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Датотеке %x имају исти датум али другачију величину.</target>
+<source>Files have the same date but a different size.</source>
+<target></target>
<source>Size:</source>
<target>Величина:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Упоређење по садржају је изостављено за искључене датотеке %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target></target>
<source>Items differ in attributes only</source>
<target>Ставке се разликују само у атрибутима</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Покретање упоређивања</target>
+<source>A folder input field is empty.</source>
+<target>Поље за одабир фолдера је празно.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Одговарајући фолдер сматраће се празним.</target>
+
+<source>Exclude:</source>
+<target>Искључи:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target></target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target></target>
+
<source>Calculating sync directions...</source>
<target>Одређујем смерове синхронизације...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Освежи атрибуте десно</target>
-<source>Cannot write permissions of %x.</source>
-<target>Не могу уписати овлашћења за %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Операција није подржана за различите типове основних фолдера.</target>
-
<source>Cannot write file %x.</source>
<target>Не могу уписати датотеку %x.</target>
@@ -267,6 +267,12 @@ Actual: %y bytes
Стварно: %y бајтова
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Не могу уписати овлашћења за %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Операција није подржана за различите типове основних фолдера.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Не могу копирати симболичну везу %x у %y.</target>
@@ -276,35 +282,29 @@ Actual: %y bytes
<source>Unable to connect to %x.</source>
<target>Не може се успоставити веза са %x.</target>
+<source>Failed to get information about server %x.</source>
+<target></target>
+
<source>Cannot open directory %x.</source>
<target>Не могу отворити фолдер %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Не могу излистати фолдер %x.</target>
-
-<source>Cannot read file attributes of %x.</source>
-<target>Не могу прочитати атрибуте од %x.</target>
-
-<source>Cannot find %x.</source>
-<target>Не могу пронаћи %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Не могу отворити датотеку %x.</target>
+<source>Cannot read directory %x.</source>
+<target></target>
<source>Cannot read file %x.</source>
<target>Не могу читати датотеку %x.</target>
-<source>Cannot find device %x.</source>
-<target>Не могу пронаћи уређај %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Не могу креирати фолдер %x.</target>
+<source>Cannot delete file %x.</source>
+<target>Не могу избрисати датотеку %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>Не могу избрисати фолдер %x.</target>
-<source>Cannot delete file %x.</source>
-<target>Не могу избрисати датотеку %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Не могу прочитати атрибуте од %x.</target>
<source>Cannot write modification time of %x.</source>
<target>Не могу уписати време промене %x.</target>
@@ -315,15 +315,60 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Не могу разрешити симболичну везу %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Не могу одредити слободан простор на диску за %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Није могуће преместити %x у Корпи за смеће.</target>
+<source>Cannot open file %x.</source>
+<target>Не могу отворити датотеку %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Не могу пронаћи уређај %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Не могу пронаћи %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Тип ставке %x није подржан:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target></target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Не могу одредити слободан простор на диску за %x.</target>
+
<source>Incorrect command line:</source>
<target>Нетачна командна линија:</target>
+<source>Error Code %x</source>
+<target></target>
+
+<source>The server does not support authentication via %x.</source>
+<target></target>
+
+<source>Required:</source>
+<target>Потребно:</target>
+
+<source>Unable to access %x.</source>
+<target></target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target></target>
+
+<source>Active connections: %x</source>
+<target></target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target></target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -355,11 +400,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Датотека базе %x још не постоји.</target>
-<source>Database file is corrupt:</source>
-<target>Датотека базе је оштећена:</target>
+<source>Database file is corrupted:</source>
+<target></target>
-<source>Database files do not share a common session.</source>
-<target>Датотеке базе не деле заједничку сесију.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target></target>
+
+<source>Loading file %x...</source>
+<target></target>
+
+<source>Saving file %x...</source>
+<target>Уписујем датотеку %x...</target>
<source>Searching for folder %x...</source>
<target>Тражим фолдер %x...</target>
@@ -389,9 +440,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Детекција обустављеног закључавања...</target>
-<source>Saving file %x...</source>
-<target>Уписујем датотеку %x...</target>
-
<source>Items processed:</source>
<target>Обрађени елементи:</target>
@@ -647,14 +695,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Недовољно простора на диску у:</target>
-<source>Required:</source>
-<target>Потребно:</target>
-
<source>Available:</source>
<target>Доступно:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Више парова фолдера уписује у заједничком фолдеру. Молимо проверите вашу конфигурацију.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target></target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target></target>
+
+<source>Versioning folder:</source>
+<target></target>
+
+<source>Base folder:</source>
+<target></target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target></target>
<source>Synchronizing folder pair:</source>
<target>Синхронизовање фолдерског пара:</target>
@@ -662,6 +719,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Генерисање базе података...</target>
+<source>Loading...</source>
+<target>Учитавање...</target>
+
<source>job name</source>
<target>име задатка</target>
@@ -786,15 +846,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Молимо одаберите фолдер на локалном систему, мрежи или на MTP уређају.</target>
-<source>SFTP folder</source>
-<target>SFTP фолдер</target>
-
-<source>Select SFTP folder</source>
-<target>Одаберите SFTP фолдер</target>
-
-<source>Select alternative folder type</source>
-<target>Одаберите алтернативни тип фолдера</target>
-
<source>&New</source>
<target>&Ново</target>
@@ -840,11 +891,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&Алати</target>
-<source>&Check for new version</source>
-<target>&Провери постојање нове верзије</target>
-
-<source>&Check now</source>
-<target>&Провери сада</target>
+<source>&Check for updates now</source>
+<target></target>
<source>Check &automatically once a week</source>
<target>Провери &аутоматски једном недељно</target>
@@ -864,6 +912,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>Уклони фолдер пар</target>
+<source>Access online storage</source>
+<target></target>
+
<source>Swap sides</source>
<target>Замени стране</target>
@@ -951,9 +1002,6 @@ The command is triggered if:
<source>Include:</source>
<target>Укључи:</target>
-<source>Exclude:</source>
-<target>Искључи:</target>
-
<source>Show examples</source>
<target>Прикажи примере</target>
@@ -1037,8 +1085,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Поређај фолдерски пар</target>
-<source>Enter your SFTP login details:</source>
-<target>Унесите ваше SFTP податке логовања:</target>
+<source>Enter your login details:</source>
+<target></target>
+
+<source>Connection type:</source>
+<target></target>
<source>Server name or IP address:</source>
<target>Име сервера или IP адресу:</target>
@@ -1046,11 +1097,29 @@ The command is triggered if:
<source>Port:</source>
<target>Порт:</target>
+<source>Encryption:</source>
+<target></target>
+
+<source>&Disabled</source>
+<target></target>
+
+<source>&Explicit SSL/TLS</source>
+<target></target>
+
+<source>Authentication:</source>
+<target></target>
+
+<source>&Password</source>
+<target></target>
+
+<source>&Key file</source>
+<target></target>
+
<source>User name:</source>
<target>Корисничко име:</target>
-<source>Password:</source>
-<target>Лозинка:</target>
+<source>Private key file:</source>
+<target></target>
<source>&Show password</source>
<target>&Прикажи лозинку</target>
@@ -1058,6 +1127,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>Фолдер на серверу:</target>
+<source>Performance improvements:</source>
+<target></target>
+
+<source>How to get best performance?</source>
+<target></target>
+
+<source>SSH connections for directory reading:</source>
+<target></target>
+
+<source>Suggested range: [1 - 10]</source>
+<target></target>
+
+<source>SFTP channels per connection:</source>
+<target></target>
+
+<source>Detect server limit</source>
+<target></target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target></target>
+
<source>Select a directory on the server:</source>
<target>Одаберите фолдер на серверу:</target>
@@ -1187,6 +1277,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Изворни код написан у C++ уз коришћење:</target>
+<source>Donation details</source>
+<target></target>
+
<source>If you like FreeFileSync:</source>
<target>Ако вам се свиђа FreeFileSync:</target>
@@ -1196,8 +1289,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Повратне информације и предлози су добродошли</target>
-<source>Homepage</source>
-<target>Веб страница</target>
+<source>Home page</source>
+<target></target>
<source>Email</source>
<target>И-меил</target>
@@ -1208,8 +1301,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Велике похвале за локализацију:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH протокол трансфера</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target></target>
+
+<source>1. Activate via internet now:</source>
+<target></target>
+
+<source>Activate online</source>
+<target></target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target></target>
+
+<source>&Copy to clipboard</source>
+<target></target>
+
+<source>Enter activation key:</source>
+<target></target>
+
+<source>Activate offline</source>
+<target></target>
<source>Save as Batch Job</source>
<target>Сачувај као беч задатак</target>
@@ -1226,6 +1337,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Изаберите временски распон</target>
+<source>FreeFileSync Donation Edition</source>
+<target></target>
+
<source>&Options</source>
<target>&Опције</target>
@@ -1247,8 +1361,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Преглед</target>
-<source>&Download</source>
-<target>&Преузми</target>
+<source>&Show details</source>
+<target></target>
<source>A new version of FreeFileSync is available:</source>
<target>Нова верзија FreeFileSync је доступна:</target>
@@ -1491,8 +1605,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Лог</target>
-<source>Loading...</source>
-<target>Учитавање...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target></target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target></target>
+
+<source>Password:</source>
+<target>Лозинка:</target>
+
+<source>Key password:</source>
+<target></target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1554,6 +1677,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Прикажи</target>
+<source>Downloading update...</source>
+<target></target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Идентификуј једнаке датотеке упоређивањем времена промена и величина.</target>
@@ -1647,12 +1773,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Проценат</target>
+<source>Failed to retrieve update information.</source>
+<target></target>
+
+<source>Automatic updates:</source>
+<target></target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target></target>
+
<source>Check for Program Updates</source>
<target>Провери постојање надоградње програма</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target></target>
+
+<source>&Auto-update</source>
+<target></target>
+
+<source>&Home page</source>
+<target></target>
+
<source>Download now?</source>
<target>Преузети сада?</target>
+<source>&Download</source>
+<target>&Преузми</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync је ажуриран.</target>
@@ -1665,14 +1812,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Није успела провера конзистентности за %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Не могу пронаћи системску функцију %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target></target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target></target>
+
+<source>Incorrect activation key.</source>
+<target></target>
<source>Unable to register to receive system messages.</source>
<target>Није могућа регистрација примања системских порука.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Инсталационе датотеке су оштећене. Молим инсталирајте FreeFileSync поново.</target>
+<source>Cannot find system function %x.</source>
+<target>Не могу пронаћи системску функцију %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Не могу регистровати нотификацију уређаја за %x.</target>
@@ -1704,9 +1857,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Не могу копирати атрибуте од %x у %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Тип ставке %x није подржан:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1752,9 +1902,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot change process I/O priorities.</source>
<target>Не може се променити процес I/O приоритета.</target>
-<source>Error Code %x:</source>
-<target>Грешка број %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Провера доступности Корпе за смеће није успела за фолдер %x.</target>
@@ -1764,9 +1911,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Конфигурациона датотека %x није комплетна. Недостајући елементи биће постављени на њихове подразумеване вредности.</target>
-<source>Internet access failed.</source>
-<target>Приступ интернету није успео.</target>
-
<source>Prepare installation</source>
<target>Припремање инсталације</target>
@@ -1836,18 +1980,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Уреди са FreeFileSync-ом</target>
-<source>Thanks for your donation and support!</source>
-<target>Хвала за вашу донацију и подршку!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ова FreeFileSync инсталација за донаторе достигла је своју границу дневног инсталисања.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Преузети регуларну верзију са веб странице FreeFileSync-а?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Преносна верзија не може бити инсталисана у одабраном фолдеру.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Молим одаберите локални тип инсталације или одаберите други фолдер за инсталацију.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target></target>
+
diff --git a/FreeFileSync/Build/Languages/slovak.lng b/FreeFileSync/Build/Languages/slovak.lng
index 490d0dcb..01f6c691 100755
--- a/FreeFileSync/Build/Languages/slovak.lng
+++ b/FreeFileSync/Build/Languages/slovak.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Je nastavený predvolený spôsob synchronizácie: Staré súbory budú nahradené novými.</target>
-<source>Creating folder %x</source>
-<target>Vytváranie priečinka %x</target>
-
<source>Creating file %x</source>
<target>Vytváranie súboru %x</target>
+<source>Creating folder %x</source>
+<target>Vytváranie priečinka %x</target>
+
<source>Creating symbolic link %x</source>
<target>Vytváranie symbolického odkazu %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Ak bude táto chyba ignorovaná, budú tieto priečinky považované za prázdne.</target>
-<source>A folder input field is empty.</source>
-<target>Nie je zadaná vstupný priečinok.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Odpovedajúci priečinok bude považovaný za prázdny.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Následujúce priečinky majú navzájom závislé cesty:</target>
-
<source>File %x has an invalid date.</source>
<target>Súbor %x má chybný dátum.</target>
<source>Date:</source>
<target>Dátum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Súbory %x majú rovnaký dátum a čas ale rozdieľnu veľkosť.</target>
+<source>Files have the same date but a different size.</source>
+<target></target>
<source>Size:</source>
<target>Veľkosť:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Porovnanie obsahu bolo vynechané pre súbory %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target></target>
<source>Items differ in attributes only</source>
<target>Položky se lišia iba v atribútoch</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Spustiť porovnávania</target>
+<source>A folder input field is empty.</source>
+<target>Nie je zadaná vstupný priečinok.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Odpovedajúci priečinok bude považovaný za prázdny.</target>
+
+<source>Exclude:</source>
+<target>Vynechať:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target></target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target></target>
+
<source>Calculating sync directions...</source>
<target>Príprava adresárov synchronizácie...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Aktualizovať atribúty napravo</target>
-<source>Cannot write permissions of %x.</source>
-<target>Nie je možné zapísať oprávnenie pre %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operácia nie je podporovaná pre rozdielne typy základných priečinkov.</target>
-
<source>Cannot write file %x.</source>
<target>Nie je možné zapísať súbor %x.</target>
@@ -267,6 +267,12 @@ Očakávané: %x b
Aktuálne: %y b
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Nie je možné zapísať oprávnenie pre %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operácia nie je podporovaná pre rozdielne typy základných priečinkov.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Nie je možné kopírovať symbolický odkaz %x do %y.</target>
@@ -276,35 +282,29 @@ Aktuálne: %y b
<source>Unable to connect to %x.</source>
<target>Nie je možné vytvoriť pripojenie k %x.</target>
+<source>Failed to get information about server %x.</source>
+<target></target>
+
<source>Cannot open directory %x.</source>
<target>Nie je možné otvoriť adresár %x.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Nie je možné prechádzať adresár %x.</target>
-
-<source>Cannot read file attributes of %x.</source>
-<target>Nie je možné načítať atribúty súboru %x.</target>
-
-<source>Cannot find %x.</source>
-<target>Nie je možné nájsť %x.</target>
-
-<source>Cannot open file %x.</source>
-<target>Nie je možné otvoriť súbor %x.</target>
+<source>Cannot read directory %x.</source>
+<target></target>
<source>Cannot read file %x.</source>
<target>Nie je možné čítať súbor %x.</target>
-<source>Cannot find device %x.</source>
-<target>Nie je možné nájsť zariadenie %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Nie je možné vytvoriť adresár %x.</target>
+<source>Cannot delete file %x.</source>
+<target>Nie je možné zmazať súbor %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>Nie je možné zmazať adresár %x.</target>
-<source>Cannot delete file %x.</source>
-<target>Nie je možné zmazať súbor %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Nie je možné načítať atribúty súboru %x.</target>
<source>Cannot write modification time of %x.</source>
<target>Nie je možné zmeniť atribút času zmeny pre %x.</target>
@@ -315,15 +315,60 @@ Aktuálne: %y b
<source>Cannot resolve symbolic link %x.</source>
<target>Nie je možné nájsť odkaz zástupcu %x.</target>
-<source>Cannot determine free disk space for %x.</source>
-<target>Nie je možné zistiť voľné miesto na disku %x.</target>
-
<source>Unable to move %x to the recycle bin.</source>
<target>Nie je možné presunúť %x do Koša.</target>
+<source>Cannot open file %x.</source>
+<target>Nie je možné otvoriť súbor %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Nie je možné nájsť zariadenie %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Nie je možné nájsť %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Typ položky %x nie je podporovaný:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target></target>
+
+<source>Cannot determine free disk space for %x.</source>
+<target>Nie je možné zistiť voľné miesto na disku %x.</target>
+
<source>Incorrect command line:</source>
<target>Neplatný príkaz:</target>
+<source>Error Code %x</source>
+<target></target>
+
+<source>The server does not support authentication via %x.</source>
+<target></target>
+
+<source>Required:</source>
+<target>Požadované:</target>
+
+<source>Unable to access %x.</source>
+<target></target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target></target>
+
+<source>Active connections: %x</source>
+<target></target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target></target>
+
<source>
<pluralform>1 byte</pluralform>
<pluralform>%x bytes</pluralform>
@@ -355,11 +400,17 @@ Aktuálne: %y b
<source>Database file %x does not yet exist.</source>
<target>Databázový súbor %x neexistuje.</target>
-<source>Database file is corrupt:</source>
-<target>Databázový súbor je poškodená:</target>
+<source>Database file is corrupted:</source>
+<target></target>
-<source>Database files do not share a common session.</source>
-<target>Databázové súbory nie sú navzájom komplementárne.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target></target>
+
+<source>Loading file %x...</source>
+<target></target>
+
+<source>Saving file %x...</source>
+<target>Ukládanie súboru %x...</target>
<source>Searching for folder %x...</source>
<target>Vyhľadávanie priečinka %x...</target>
@@ -389,9 +440,6 @@ Aktuálne: %y b
<source>Detecting abandoned lock...</source>
<target>Preverovanie uzamknutia...</target>
-<source>Saving file %x...</source>
-<target>Ukládanie súboru %x...</target>
-
<source>Items processed:</source>
<target>Spracovaných položiek:</target>
@@ -647,14 +695,23 @@ Príkaz bude spustení ak:
<source>Not enough free disk space available in:</source>
<target>Nedostatok miesta na disku:</target>
-<source>Required:</source>
-<target>Požadované:</target>
-
<source>Available:</source>
<target>K dispozícií:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Viac priečinkov obsahuje společný podpriečinok. Prosím skontrolujte si nastavenia synchronizácie.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target></target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target></target>
+
+<source>Versioning folder:</source>
+<target></target>
+
+<source>Base folder:</source>
+<target></target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target></target>
<source>Synchronizing folder pair:</source>
<target>Synchronizácia dvojice priečinkov:</target>
@@ -662,6 +719,9 @@ Príkaz bude spustení ak:
<source>Generating database...</source>
<target>Vytváranie databázy...</target>
+<source>Loading...</source>
+<target>Načítanie...</target>
+
<source>job name</source>
<target>názov úlohy</target>
@@ -786,15 +846,6 @@ Príkaz bude spustení ak:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Prosím vyberte priečinok v lokálnom súborovom systéme, sieti alebo multimediálnom zariadení.</target>
-<source>SFTP folder</source>
-<target>SFTP priečinok</target>
-
-<source>Select SFTP folder</source>
-<target>Vyberte SFTP priečinok</target>
-
-<source>Select alternative folder type</source>
-<target>Vyberte alternatívny typ priečinka</target>
-
<source>&New</source>
<target>&Nový</target>
@@ -840,11 +891,8 @@ Príkaz bude spustení ak:
<source>&Tools</source>
<target>&Nastavenie</target>
-<source>&Check for new version</source>
-<target>&Skontrolovať aktualizácie</target>
-
-<source>&Check now</source>
-<target>Skontrolovať &teraz</target>
+<source>&Check for updates now</source>
+<target></target>
<source>Check &automatically once a week</source>
<target>Kontrolovať &automaticky raz týždenne</target>
@@ -864,6 +912,9 @@ Príkaz bude spustení ak:
<source>Remove folder pair</source>
<target>Odstrániť dvojicu priečinkov</target>
+<source>Access online storage</source>
+<target></target>
+
<source>Swap sides</source>
<target>Zámena strán</target>
@@ -951,9 +1002,6 @@ Príkaz bude spustení ak:
<source>Include:</source>
<target>Zahrnúť:</target>
-<source>Exclude:</source>
-<target>Vynechať:</target>
-
<source>Show examples</source>
<target>Ukázať príklady</target>
@@ -1037,8 +1085,11 @@ Príkaz bude spustení ak:
<source>Arrange folder pair</source>
<target>Usporiadať dvojicu priečinkov</target>
-<source>Enter your SFTP login details:</source>
-<target>Zadajte prihlasovacie údaje k SFTP:</target>
+<source>Enter your login details:</source>
+<target></target>
+
+<source>Connection type:</source>
+<target></target>
<source>Server name or IP address:</source>
<target>Meno servera alebo jeho IP adresa:</target>
@@ -1046,11 +1097,29 @@ Príkaz bude spustení ak:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target></target>
+
+<source>&Disabled</source>
+<target></target>
+
+<source>&Explicit SSL/TLS</source>
+<target></target>
+
+<source>Authentication:</source>
+<target></target>
+
+<source>&Password</source>
+<target></target>
+
+<source>&Key file</source>
+<target></target>
+
<source>User name:</source>
<target>Uživateľské meno:</target>
-<source>Password:</source>
-<target>Heslo:</target>
+<source>Private key file:</source>
+<target></target>
<source>&Show password</source>
<target>&Zobraziť heslo</target>
@@ -1058,6 +1127,27 @@ Príkaz bude spustení ak:
<source>Directory on server:</source>
<target>Adresár na servery:</target>
+<source>Performance improvements:</source>
+<target></target>
+
+<source>How to get best performance?</source>
+<target></target>
+
+<source>SSH connections for directory reading:</source>
+<target></target>
+
+<source>Suggested range: [1 - 10]</source>
+<target></target>
+
+<source>SFTP channels per connection:</source>
+<target></target>
+
+<source>Detect server limit</source>
+<target></target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target></target>
+
<source>Select a directory on the server:</source>
<target>Výber adresára na servery:</target>
@@ -1184,6 +1274,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Zdrojový kód bol napísaný kompletne v C++ pomocou:</target>
+<source>Donation details</source>
+<target></target>
+
<source>If you like FreeFileSync:</source>
<target>Pokiaľ sa Vám FreeFileSync páči:</target>
@@ -1193,8 +1286,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Komentáre a námety sú vždy vítané</target>
-<source>Homepage</source>
-<target>Domovská stránka</target>
+<source>Home page</source>
+<target></target>
<source>Email</source>
<target>Email</target>
@@ -1205,8 +1298,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Poďakovanie za preklad FreeFileSync:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH protokol</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target></target>
+
+<source>1. Activate via internet now:</source>
+<target></target>
+
+<source>Activate online</source>
+<target></target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target></target>
+
+<source>&Copy to clipboard</source>
+<target></target>
+
+<source>Enter activation key:</source>
+<target></target>
+
+<source>Activate offline</source>
+<target></target>
<source>Save as Batch Job</source>
<target>Uložiť ako dávku</target>
@@ -1223,6 +1334,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Zadať časové rozmedzie</target>
+<source>FreeFileSync Donation Edition</source>
+<target></target>
+
<source>&Options</source>
<target>Nastavenie &programu</target>
@@ -1244,8 +1358,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Prehľad</target>
-<source>&Download</source>
-<target>&Sťahovannie</target>
+<source>&Show details</source>
+<target></target>
<source>A new version of FreeFileSync is available:</source>
<target>Je dostupná nová verzia FreeFileSync:</target>
@@ -1488,8 +1602,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Záznam spracovania</target>
-<source>Loading...</source>
-<target>Načítanie...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target></target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target></target>
+
+<source>Password:</source>
+<target>Heslo:</target>
+
+<source>Key password:</source>
+<target></target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1551,6 +1674,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Zobraziť</target>
+<source>Downloading update...</source>
+<target></target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Rozpoznať rovnaké súbory porovnaním ich času úpravy a veľkosti.</target>
@@ -1644,12 +1770,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Percentný podiel</target>
+<source>Failed to retrieve update information.</source>
+<target></target>
+
+<source>Automatic updates:</source>
+<target></target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target></target>
+
<source>Check for Program Updates</source>
<target>Hľadanie aktualizácií programu</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target></target>
+
+<source>&Auto-update</source>
+<target></target>
+
+<source>&Home page</source>
+<target></target>
+
<source>Download now?</source>
<target>Stiahúť teraz?</target>
+<source>&Download</source>
+<target>&Sťahovannie</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je aktuálny.</target>
@@ -1662,14 +1809,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Overenie konzistencie pre %x zlyhalo.</target>
-<source>Cannot find system function %x.</source>
-<target>Nie je možné nájsť systémovú funkciu %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target></target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target></target>
+
+<source>Incorrect activation key.</source>
+<target></target>
<source>Unable to register to receive system messages.</source>
<target>Nepodarilo sa registrovať k odberu systémových správ.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Inštalačný súbor je poškodený. Prosím preinštalujte FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Nie je možné nájsť systémovú funkciu %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Nepodarilo sa registrovať správy zaiadenia %x.</target>
@@ -1701,9 +1854,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Nie je možné kopírovať atribúty z %x do %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Typ položky %x nie je podporovaný:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1749,9 +1899,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot change process I/O priorities.</source>
<target>Nie je možné nastaviť I/O priority procesu.</target>
-<source>Error Code %x:</source>
-<target>Chybový kód %x:</target>
-
<source>Checking recycle bin failed for folder %x.</source>
<target>Zlyhala kontrola Koša pre priečinok %x.</target>
@@ -1761,9 +1908,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Konfiguračný súbor %x je nekompletný. Chybajúce položky budú nahradené predvolenými hodnotami.</target>
-<source>Internet access failed.</source>
-<target>Nie je prístup k internetu.</target>
-
<source>Prepare installation</source>
<target>Príprava inštalácie</target>
@@ -1833,18 +1977,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Upraviť vo FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Ďakujem za Vaše príspevky a podporu!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Inštalačný program FreeFileSync pre dárcov dosiahol denný limit inštalovania.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Stiahnúť teraz regulárnu verziu FreeFileSync z domovskej stránky?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Prenosná verzia nemôže byť nainštalovaná do vybraného priečinka.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Prosím zvoľte lokálny typ inštalácie alebo vyberte iný priečinok pre inštaláciu.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target></target>
+
diff --git a/FreeFileSync/Build/Languages/slovenian.lng b/FreeFileSync/Build/Languages/slovenian.lng
index 6d4dcbeb..793d48b2 100755
--- a/FreeFileSync/Build/Languages/slovenian.lng
+++ b/FreeFileSync/Build/Languages/slovenian.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Ustvarjam mapo %x</target>
-
<source>Creating file %x</source>
<target>Ustvarjam datoteko %x</target>
+<source>Creating folder %x</source>
+<target>Ustvarjam mapo %x</target>
+
<source>Creating symbolic link %x</source>
<target>Ustvarjam simbolično povezavo %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>V primeru ignoriranja te napake bo mapa smatrana kot prazna. Manjkajoče mape se ustvarijo avtomatično, ko je to potrebno.</target>
-<source>A folder input field is empty.</source>
-<target>Vnosno polje za mapo je prazno.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Ustrezna mapa bo smatrana kot prazna.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Naslednje poti imenikov so med seboj odvisne:</target>
-
<source>File %x has an invalid date.</source>
<target>Datoteka %x ima neveljaven datum.</target>
<source>Date:</source>
<target>Datum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Datoteki %x imata enak datum ampak različno velikost.</target>
+<source>Files have the same date but a different size.</source>
+<target></target>
<source>Size:</source>
<target>Velikost:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Primerjava vsebine je bila izpuščena za izločene datoteke %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target></target>
<source>Items differ in attributes only</source>
<target>Elementi se razlikujejo samo v atributih</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Začenjam primerjavo</target>
+<source>A folder input field is empty.</source>
+<target>Vnosno polje za mapo je prazno.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Ustrezna mapa bo smatrana kot prazna.</target>
+
+<source>Exclude:</source>
+<target>Izključi:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target></target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target></target>
+
<source>Calculating sync directions...</source>
<target>Preračunavam sinhronizacijske smeri...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Posodobi atribute na desni strani</target>
-<source>Cannot write permissions of %x.</source>
-<target>Ne morem zapisati dovoljenj od %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Operacija ni podprta za različne osnovne tipe map.</target>
-
<source>Cannot write file %x.</source>
<target>Ne morem zapisati datoteke %x.</target>
@@ -267,38 +267,44 @@ Pričakovano: %x bajtov
Dejansko: %y bajtov
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Ne morem zapisati dovoljenj od %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Operacija ni podprta za različne osnovne tipe map.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Ne morem kopirati simbolične povezave %x v %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Ne morem premakniti datoteko %x v %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Ne morem oštevilčiti imenika %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Ne morem povezati na %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Ne morem brati datotečnih atributov od %x.</target>
+<source>Failed to get information about server %x.</source>
+<target></target>
-<source>Cannot find %x.</source>
-<target>Ne najdem %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Ne morem odpreti imenika %x.</target>
-<source>Cannot open file %x.</source>
-<target>Ne morem odpreti datoteke %x.</target>
+<source>Cannot read directory %x.</source>
+<target></target>
<source>Cannot read file %x.</source>
<target>Ne morem prebrati datoteke %x.</target>
-<source>Cannot find device %x.</source>
-<target>Ne najdem naprave %x.</target>
-
<source>Cannot create directory %x.</source>
<target>Ne morem ustvariti imenika %x.</target>
+<source>Cannot delete file %x.</source>
+<target>Ne morem izbrisati datoteke %x.</target>
+
<source>Cannot delete directory %x.</source>
<target>Ne morem izbrisati imenika %x.</target>
-<source>Cannot delete file %x.</source>
-<target>Ne morem izbrisati datoteke %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Ne morem brati datotečnih atributov od %x.</target>
<source>Cannot write modification time of %x.</source>
<target>Ne morem zapisati časa spremembe od %x.</target>
@@ -309,23 +315,59 @@ Dejansko: %y bajtov
<source>Cannot resolve symbolic link %x.</source>
<target>Ne morem razrešiti simbolične povezave %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Ne morem odpreti imenika %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Ne morem premakniti %x v koš.</target>
+
+<source>Cannot open file %x.</source>
+<target>Ne morem odpreti datoteke %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Ne najdem naprave %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Ne najdem %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Element tipa %x ni podprt:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target></target>
<source>Cannot determine free disk space for %x.</source>
<target>Ne morem določiti prostega prostora na disku za %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Ne morem premakniti %x v koš.</target>
-
<source>Incorrect command line:</source>
<target>Napačna ukazna vrstica:</target>
-<source>Error Code %x:</source>
-<target>Koda napake %x:</target>
+<source>Error Code %x</source>
+<target></target>
-<source>Unable to connect to %x.</source>
-<target>Ne morem povezati na %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target></target>
+
+<source>Required:</source>
+<target>Zahtevano:</target>
+
+<source>Unable to access %x.</source>
+<target></target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target></target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target></target>
+
+<source>Active connections: %x</source>
+<target></target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target></target>
<source>
<pluralform>1 byte</pluralform>
@@ -359,11 +401,17 @@ Dejansko: %y bajtov
<source>Database file %x does not yet exist.</source>
<target>Datoteka podatkovne baze %x še ne obstaja.</target>
-<source>Database file is corrupt:</source>
-<target>Datoteka podatkovne baze je poškodovana:</target>
+<source>Database file is corrupted:</source>
+<target></target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target></target>
-<source>Database files do not share a common session.</source>
-<target>Datoteke podatkovne baze si ne delijo skupne seje.</target>
+<source>Loading file %x...</source>
+<target></target>
+
+<source>Saving file %x...</source>
+<target>Shranjevanje datoteke %x...</target>
<source>Searching for folder %x...</source>
<target>Iskanje mape %x...</target>
@@ -394,9 +442,6 @@ Dejansko: %y bajtov
<source>Detecting abandoned lock...</source>
<target>Zaznavanje opuščenega zaklepa...</target>
-<source>Saving file %x...</source>
-<target>Shranjevanje datoteke %x...</target>
-
<source>Items processed:</source>
<target>Obdelanih elementov:</target>
@@ -653,14 +698,23 @@ Ukaz se sproži če:
<source>Not enough free disk space available in:</source>
<target>Na voljo ni dovolj prostega prostora na disku v:</target>
-<source>Required:</source>
-<target>Zahtevano:</target>
-
<source>Available:</source>
<target>Na voljo:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Več parov map zapisuje v skupno podmapo. Prosim, preverite svojo konfiguracijo.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target></target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target></target>
+
+<source>Versioning folder:</source>
+<target></target>
+
+<source>Base folder:</source>
+<target></target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target></target>
<source>Synchronizing folder pair:</source>
<target>Sinhroniziram par map:</target>
@@ -668,6 +722,9 @@ Ukaz se sproži če:
<source>Generating database...</source>
<target>Ustvarjam podatkovno bazo...</target>
+<source>Loading...</source>
+<target>Nalagam...</target>
+
<source>job name</source>
<target>naziv opravila</target>
@@ -793,15 +850,6 @@ Ukaz se sproži če:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Prosim izberite mapo na lokalnem sistemu datotek, mreži ali na MTP napravi.</target>
-<source>SFTP folder</source>
-<target>SFTP mapa</target>
-
-<source>Select SFTP folder</source>
-<target>Izberi SFTP mapo</target>
-
-<source>Select alternative folder type</source>
-<target>Izberite alternativni tip mape</target>
-
<source>&New</source>
<target>&Nova</target>
@@ -847,11 +895,8 @@ Ukaz se sproži če:
<source>&Tools</source>
<target>&Orodja</target>
-<source>&Check for new version</source>
-<target>&Preveri, če obstaja nova verzija</target>
-
-<source>&Check now</source>
-<target>&Preveri zdaj</target>
+<source>&Check for updates now</source>
+<target></target>
<source>Check &automatically once a week</source>
<target>S&amodejno preveri enkrat tedensko</target>
@@ -871,6 +916,9 @@ Ukaz se sproži če:
<source>Remove folder pair</source>
<target>Odstrani par imenikov</target>
+<source>Access online storage</source>
+<target></target>
+
<source>Swap sides</source>
<target>Zamenjaj strani</target>
@@ -958,9 +1006,6 @@ Ukaz se sproži če:
<source>Include:</source>
<target>Vključi:</target>
-<source>Exclude:</source>
-<target>Izključi:</target>
-
<source>Show examples</source>
<target>Pokaži primere</target>
@@ -1044,8 +1089,11 @@ Ukaz se sproži če:
<source>Arrange folder pair</source>
<target>Uredi par map</target>
-<source>Enter your SFTP login details:</source>
-<target>Vnesite vaše SFTP podatke za prijavo:</target>
+<source>Enter your login details:</source>
+<target></target>
+
+<source>Connection type:</source>
+<target></target>
<source>Server name or IP address:</source>
<target>Ime serverja ali IP naslova:</target>
@@ -1053,11 +1101,29 @@ Ukaz se sproži če:
<source>Port:</source>
<target>Vrata:</target>
+<source>Encryption:</source>
+<target></target>
+
+<source>&Disabled</source>
+<target></target>
+
+<source>&Explicit SSL/TLS</source>
+<target></target>
+
+<source>Authentication:</source>
+<target></target>
+
+<source>&Password</source>
+<target></target>
+
+<source>&Key file</source>
+<target></target>
+
<source>User name:</source>
<target>Uporabniško ime:</target>
-<source>Password:</source>
-<target>Geslo:</target>
+<source>Private key file:</source>
+<target></target>
<source>&Show password</source>
<target>&Prikaži geslo</target>
@@ -1065,6 +1131,27 @@ Ukaz se sproži če:
<source>Directory on server:</source>
<target>Imenik na serverju:</target>
+<source>Performance improvements:</source>
+<target></target>
+
+<source>How to get best performance?</source>
+<target></target>
+
+<source>SSH connections for directory reading:</source>
+<target></target>
+
+<source>Suggested range: [1 - 10]</source>
+<target></target>
+
+<source>SFTP channels per connection:</source>
+<target></target>
+
+<source>Detect server limit</source>
+<target></target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target></target>
+
<source>Select a directory on the server:</source>
<target>Izberite imenik na strežniku:</target>
@@ -1194,6 +1281,9 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Source code written in C++ using:</source>
<target>Izvorna koda napisana v C++ z uporabo:</target>
+<source>Donation details</source>
+<target></target>
+
<source>If you like FreeFileSync:</source>
<target>Če vam je FreeFileSync všeč:</target>
@@ -1203,8 +1293,8 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Feedback and suggestions are welcome</source>
<target>Povratne informacije in predlogi so dobrodošli</target>
-<source>Homepage</source>
-<target>Domača stran</target>
+<source>Home page</source>
+<target></target>
<source>Email</source>
<target>Elektronska pošta</target>
@@ -1215,8 +1305,26 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Many thanks for localization:</source>
<target>Zahvala prevajalcem za lokalizacijo:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protokol prenosa SSH datoteke</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target></target>
+
+<source>1. Activate via internet now:</source>
+<target></target>
+
+<source>Activate online</source>
+<target></target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target></target>
+
+<source>&Copy to clipboard</source>
+<target></target>
+
+<source>Enter activation key:</source>
+<target></target>
+
+<source>Activate offline</source>
+<target></target>
<source>Save as Batch Job</source>
<target>Shrani kot serijsko opravilo</target>
@@ -1233,6 +1341,9 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Select Time Span</source>
<target>Izberi časovno obdobje</target>
+<source>FreeFileSync Donation Edition</source>
+<target></target>
+
<source>&Options</source>
<target>&Možnosti</target>
@@ -1254,8 +1365,8 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Overview</source>
<target>Pregled</target>
-<source>&Download</source>
-<target>&Prenesi</target>
+<source>&Show details</source>
+<target></target>
<source>A new version of FreeFileSync is available:</source>
<target>Nova različica FreeFileSync je na voljo:</target>
@@ -1502,8 +1613,17 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Log</source>
<target>Dnevnik</target>
-<source>Loading...</source>
-<target>Nalagam...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target></target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target></target>
+
+<source>Password:</source>
+<target>Geslo:</target>
+
+<source>Key password:</source>
+<target></target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1568,6 +1688,9 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>&Show</source>
<target>&Prikaži</target>
+<source>Downloading update...</source>
+<target></target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Določi enake datoteke s primerjavo datuma spremembe in velikosti.</target>
@@ -1661,12 +1784,33 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Percentage</source>
<target>Odstotek</target>
+<source>Failed to retrieve update information.</source>
+<target></target>
+
+<source>Automatic updates:</source>
+<target></target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target></target>
+
<source>Check for Program Updates</source>
<target>Prevri obstoj nadgradnje programa</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target></target>
+
+<source>&Auto-update</source>
+<target></target>
+
+<source>&Home page</source>
+<target></target>
+
<source>Download now?</source>
<target>Prenesem sedaj?</target>
+<source>&Download</source>
+<target>&Prenesi</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je posodobljen.</target>
@@ -1679,14 +1823,20 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Consistency check failed for %x.</source>
<target>Preverjanje usklajenosti ni uspelo za %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Ne morem najti sistemske funkcije %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target></target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target></target>
+
+<source>Incorrect activation key.</source>
+<target></target>
<source>Unable to register to receive system messages.</source>
<target>Ne morem se registrirati za prejem sistemskih sporočil.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Namestitvene datoteke so poškodovane. Prosimo,da ponovno namestitr FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Ne morem najti sistemske funkcije %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Omogoči registracijo obvestil naprave za %x.</target>
@@ -1718,9 +1868,6 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Cannot copy attributes from %x to %y.</source>
<target>Ne morem kopirati atributov iz %x v %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Element tipa %x ni podprt:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1778,9 +1925,6 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Nastavitvena datoteka %x je nepopolna. Manjkajoči element bo nastavljen na privzete vrednosti.</target>
-<source>Internet access failed.</source>
-<target>Neuspešna povezava na internet.</target>
-
<source>Prepare installation</source>
<target>Pripravljam namestitev</target>
@@ -1850,18 +1994,12 @@ To zagotavlja konsistenčnost podatkov v primeru napake.
<source>Edit with FreeFileSync</source>
<target>Uredi z FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Hvala za vašo donacijo in podporo!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Ta FreeFileSync namestitveni program za donatorje je dosegel dnevno namestitveno mejo.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Prenesite redno verzijo iz FreeFileSync domače strani zdaj?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>namestitev prenosne verzije v izbrano mapo ni mogoč.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Prosimo izberite tip lokalne namestitve ali pa izberite drugo mapo za namestitev.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target></target>
+
diff --git a/FreeFileSync/Build/Languages/spanish.lng b/FreeFileSync/Build/Languages/spanish.lng
index aafbacec..4c34cb2a 100755
--- a/FreeFileSync/Build/Languages/spanish.lng
+++ b/FreeFileSync/Build/Languages/spanish.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Fijando direcciones de sincronización predeterminadas: los archivos nuevos sobrescribirán los archivos antiguos.</target>
-<source>Creating folder %x</source>
-<target>Creando carpeta %x</target>
-
<source>Creating file %x</source>
<target>Creando archivo %x</target>
+<source>Creating folder %x</source>
+<target>Creando carpeta %x</target>
+
<source>Creating symbolic link %x</source>
<target>Creando el vínculo simbólico %x</target>
@@ -50,7 +50,7 @@
<target>Borrando vínculo simbólico %x</target>
<source>Checking recycle bin availability for folder %x...</source>
-<target>Comprobando disponibilidad de la papelera de reciclaje para la carpeta %x…</target>
+<target>Comprobando disponibilidad de la papelera de reciclaje para la carpeta %x...</target>
<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source>
<target>La papelera de reciclaje no está disponible para las carpetas siguientes. Los archivos se borrarán de forma permanente:</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Si ignora este error, las carpetas se consideran vacías. Las carpetas que faltan son creadas automáticamente si es necesario.</target>
-<source>A folder input field is empty.</source>
-<target>Un campo de entrada de la carpeta está vacío.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>La siguiente carpeta será considerada como vacía.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Las rutas de carpetas siguientes tienen dependencias reciprocas:</target>
-
<source>File %x has an invalid date.</source>
<target>El archivo %x tiene una fecha inválida.</target>
<source>Date:</source>
<target>Fecha:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Los archivos %x tienen la misma fecha pero un tamaño diferente.</target>
+<source>Files have the same date but a different size.</source>
+<target>Los archivos tienen misma fecha pero tamaño diferente.</target>
<source>Size:</source>
<target>Tamaño:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>No se compararon por contenido los archivos excluidos %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>No se compararon por contenido los archivos excluidos.</target>
<source>Items differ in attributes only</source>
<target>Los elementos sólo se diferencian en los atributos</target>
@@ -149,7 +140,7 @@
<target>Comparación del contenido de los archivos %x</target>
<source>Generating file list...</source>
-<target>Generando lista de archivos…</target>
+<target>Generando lista de archivos...</target>
<source>Fail-safe file copy</source>
<target>Copia de archivo a prueba de fallos</target>
@@ -187,8 +178,23 @@
<source>Starting comparison</source>
<target>Iniciando la comparación</target>
+<source>A folder input field is empty.</source>
+<target>Un campo de entrada de la carpeta está vacío.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>La carpeta correspondiente se considerará vacía.</target>
+
+<source>Exclude:</source>
+<target>Excluir:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Una carpeta base de las carpetas emparejadas es común a la otra.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Conviene excluir la carpeta de la sincronización mediante un filtro.</target>
+
<source>Calculating sync directions...</source>
-<target>Calculando direcciones de sincronización…</target>
+<target>Calculando direcciones de sincronización...</target>
<source>Out of memory.</source>
<target>Sin memoria.</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Actualizar atributos en la derecha</target>
-<source>Cannot write permissions of %x.</source>
-<target>No se pueden escribir los permisos de %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>No se admite esta operación para tipos de carpetas base diferentes.</target>
-
<source>Cannot write file %x.</source>
<target>No se puede escribir el archivo %x.</target>
@@ -267,39 +267,45 @@ Esperados: %x bytes
Reales: %y bytes
</target>
+<source>Cannot write permissions of %x.</source>
+<target>No se pueden escribir los permisos de %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>No se admite esta operación para tipos de carpetas base diferentes.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>No se puede copiar el vínculo simbólico %x a %y.</target>
<source>Cannot move file %x to %y.</source>
<target>No se puede mover el archivo %x a %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>No se puede enumerar el directorio %x.</target>
+<source>Unable to connect to %x.</source>
+<target>No se puede conectar a %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>No se puede leer archivo de atributos de %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Fallo al obtener información del servidor %x.</target>
-<source>Cannot find %x.</source>
-<target>No se encuentra %x.</target>
+<source>Cannot open directory %x.</source>
+<target>No se puede abrir el directorio %x.</target>
-<source>Cannot open file %x.</source>
-<target>No se puede abrir el archivo %x.</target>
+<source>Cannot read directory %x.</source>
+<target>No se puede leer el directorio %x.</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>No se puede leer archivo de atributos de %x.</target>
<source>Cannot read file %x.</source>
<target>No se puede leer el archivo %x.</target>
-<source>Cannot find device %x.</source>
-<target>No se encuentra el dispositivo %x.</target>
-
<source>Cannot create directory %x.</source>
<target>No se puede crear el directorio %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>No se puede eliminar el directorio %x.</target>
-
<source>Cannot delete file %x.</source>
<target>No se puede eliminar el archivo %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>No se puede eliminar el directorio %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>No se puede escribir el tiempo de modificación de %x.</target>
@@ -309,23 +315,65 @@ Reales: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>No se puede resolver el vínculo simbólico %x.</target>
-<source>Cannot open directory %x.</source>
-<target>No se puede abrir el directorio %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Incapaz de mover %x a la papelera de reciclaje.</target>
+
+<source>Cannot open file %x.</source>
+<target>No se puede abrir el archivo %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>No se encuentra el dispositivo %x.</target>
+
+<source>Cannot find %x.</source>
+<target>No se encuentra %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>El tipo de objeto %x no esta soportado:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>No se puede eliminar el el vínculo simbólico %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>No se puede determinar el espacio libre en disco para %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Incapaz de mover %x a la papelera de reciclaje.</target>
-
<source>Incorrect command line:</source>
<target>Línea de comandos incorrecta:</target>
-<source>Error Code %x:</source>
-<target>Código de error %x:</target>
+<source>Error Code %x</source>
+<target>Código de error %x</target>
-<source>Unable to connect to %x.</source>
-<target>No se puede conectar a %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>El servidor no admite autenticación via %x.</target>
+
+<source>Required:</source>
+<target>Requerido:</target>
+
+<source>Unable to access %x.</source>
+<target>No se puede acceder a %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>La operación superó el tiempo de espera tras 1 segundo.</pluralform>
+<pluralform>La operación superó el tiempo de espera tras %x segundos.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>No se puede esperar más de 1 conexión a la vez.</pluralform>
+<pluralform>No se pueden esperar más de %x conexiones a la vez.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Conexiones activas: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Fallo de apertura del canal SFTP número %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,17 +405,23 @@ Reales: %y bytes
<source>Database file %x does not yet exist.</source>
<target>El archivo de base de datos %x aún no existe.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>El archivo de base de datos está dañado:</target>
-<source>Database files do not share a common session.</source>
-<target>Los archivos de base de datos no comparten una sesión común.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Los archivos de datos aún no contienen información acerca de una sincronización anterior.</target>
+
+<source>Loading file %x...</source>
+<target>Cargando el archivo %x...</target>
+
+<source>Saving file %x...</source>
+<target>Guardando archivo %x...</target>
<source>Searching for folder %x...</source>
-<target>Buscando carpeta %x…</target>
+<target>Buscando carpeta %x...</target>
<source>Timeout while searching for folder %x.</source>
-<target>Timeout while searching for folder %x.</target>
+<target>Tiempo de espera agotado al buscar por la carpeta %x.</target>
<source>Cannot get process information.</source>
<target>No se puede obtener información del proceso.</target>
@@ -388,10 +442,7 @@ Reales: %y bytes
</target>
<source>Detecting abandoned lock...</source>
-<target>Detección de bloqueo abandonado…</target>
-
-<source>Saving file %x...</source>
-<target>Guardando archivo %x…</target>
+<target>Detección de bloqueo abandonado...</target>
<source>Items processed:</source>
<target>Elementos procesados:</target>
@@ -448,7 +499,7 @@ Reales: %y bytes
<target>El nombre de volumen %x no es parte de la ruta de archivo %y.</target>
<source>Stop requested: Waiting for current operation to finish...</source>
-<target>Detención solicitada: esperando a que la operación actual finalice…</target>
+<target>Detención solicitada: esperando a que la operación actual finalice...</target>
<source>Unable to create time stamp for versioning:</source>
<target>No es posible crear la fecha y hora para el versionado:</target>
@@ -463,10 +514,10 @@ Reales: %y bytes
<target>Seleccione una carpeta</target>
<source>&Open...</source>
-<target>&Abrir…</target>
+<target>&Abrir...</target>
<source>Save &as...</source>
-<target>Guardar &como…</target>
+<target>Guardar &como...</target>
<source>E&xit</source>
<target>Sal&ir</target>
@@ -493,7 +544,7 @@ Reales: %y bytes
<target>2. Introduzca una línea de comandos.</target>
<source>3. Press 'Start'.</source>
-<target>3. Presione ’Inicio’.</target>
+<target>3. Presione 'Inicio'.</target>
<source>To get started just import a .ffs_batch file.</source>
<target>Para comenzar, importe un archivo .ffs_batch.</target>
@@ -552,7 +603,7 @@ El comando es disparado si:
<target>Supervisión de directorios activada</target>
<source>Waiting until all directories are available...</source>
-<target>Esperando que todos los directorios estén disponibles…</target>
+<target>Esperando que todos los directorios estén disponibles...</target>
<source>&Restore</source>
<target>&Restaurar</target>
@@ -588,7 +639,7 @@ El comando es disparado si:
<target>Personalizado</target>
<source>Multiple...</source>
-<target>Múltiple…</target>
+<target>Múltiple...</target>
<source>Moving file %x to %y</source>
<target>Mover archivo de %x a %y</target>
@@ -600,7 +651,7 @@ El comando es disparado si:
<target>Mover vínculo simbólico de %x a %y</target>
<source>Removing old versions...</source>
-<target>Eliminando versiones antiguas…</target>
+<target>Eliminando versiones antiguas...</target>
<source>Updating file %x</source>
<target>Actualizando archivo %x</target>
@@ -624,7 +675,7 @@ El comando es disparado si:
<target>Error de verificación de datos:</target>
<source>Creating a Volume Shadow Copy for %x...</source>
-<target>Creando una Instantánea de volumen para %x…</target>
+<target>Creando una Instantánea de volumen para %x...</target>
<source>Target folder %x already existing.</source>
<target>La carpeta de destino %x ya existe.</target>
@@ -647,20 +698,32 @@ El comando es disparado si:
<source>Not enough free disk space available in:</source>
<target>Espacio en disco insuficiente en:</target>
-<source>Required:</source>
-<target>Requerido:</target>
-
<source>Available:</source>
<target>Disponible:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Tiene varias carpetas emparejadas para escribir en la misma subcarpeta. Revise su configuración.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Se van a sincronizar algunos archivos como partes de varias carpetas base.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Para evitar conflictos, defina filtros de exclusión de forma que cada archivo actualizado sea procesado desde una única carpeta base.</target>
+
+<source>Versioning folder:</source>
+<target>Carpeta de versionado:</target>
+
+<source>Base folder:</source>
+<target>Carpeta base:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>La carpeta de versionado se sincronizará por estar incluida en una carpeta base.</target>
<source>Synchronizing folder pair:</source>
<target>Sincronizando par de carpetas:</target>
<source>Generating database...</source>
-<target>Generando base de datos…</target>
+<target>Generando base de datos...</target>
+
+<source>Loading...</source>
+<target>Cargando...</target>
<source>job name</source>
<target>nombre de tarea</target>
@@ -687,7 +750,7 @@ El comando es disparado si:
<target>Sincronización completada satisfactoriamente</target>
<source>Cleaning up old log files...</source>
-<target>Limpiando antiguos archivos de registro…</target>
+<target>Limpiando antiguos archivos de registro...</target>
<source>You can switch to FreeFileSync's main window to resolve this issue.</source>
<target>Puede cambiar a la ventana principal de FreeFileSync para resolver este problema.</target>
@@ -709,15 +772,15 @@ El comando es disparado si:
<pluralform>Automatic retry in %x seconds...</pluralform>
</source>
<target>
-<pluralform>Reintento automático en 1 segundo…</pluralform>
-<pluralform>Reintento automático en %x segundos…</pluralform>
+<pluralform>Reintento automático en 1 segundo...</pluralform>
+<pluralform>Reintento automático en %x segundos...</pluralform>
</target>
<source>&Ignore subsequent errors</source>
<target>&Ignorar errores posteriores</target>
<source>Retrying operation...</source>
-<target>Reintentando la operación…</target>
+<target>Reintentando la operación...</target>
<source>Serious Error</source>
<target>Error grave</target>
@@ -785,15 +848,6 @@ El comando es disparado si:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Seleccione otra carpeta del systema de archivos local, en red o en un dispositivo MTP.</target>
-<source>SFTP folder</source>
-<target>Carpeta SFTP</target>
-
-<source>Select SFTP folder</source>
-<target>Seleccione una carpeta SFTP</target>
-
-<source>Select alternative folder type</source>
-<target>Seleccione otro tipo de carpeta</target>
-
<source>&New</source>
<target>&Nuevo</target>
@@ -801,7 +855,7 @@ El comando es disparado si:
<target>&Guardar</target>
<source>Save as &batch job...</source>
-<target>Guardar como tarea por &lotes…</target>
+<target>Guardar como tarea por &lotes...</target>
<source>Start &comparison</source>
<target>Iniciar la &comparación</target>
@@ -828,22 +882,19 @@ El comando es disparado si:
<target>&Idioma</target>
<source>&Find...</source>
-<target>&Buscar…</target>
+<target>&Buscar...</target>
<source>&Reset layout</source>
-<target>&Reiniciar la disposición</target>
+<target>&Restablecer diseño</target>
<source>&Export file list...</source>
-<target>&Exportar lista de archivos…</target>
+<target>&Exportar lista de archivos...</target>
<source>&Tools</source>
<target>Herramien&tas</target>
-<source>&Check for new version</source>
-<target>&Comprobar nueva versión</target>
-
-<source>&Check now</source>
-<target>&Comprobar ahora</target>
+<source>&Check for updates now</source>
+<target>&Comprobar actualizaciones ahora</target>
<source>Check &automatically once a week</source>
<target>Comprobar &automáticamente una vez por semana</target>
@@ -863,6 +914,9 @@ El comando es disparado si:
<source>Remove folder pair</source>
<target>Eliminar un par de carpetas</target>
+<source>Access online storage</source>
+<target>Acceder a almacenamiento en línea</target>
+
<source>Swap sides</source>
<target>Intercambiar lados</target>
@@ -879,13 +933,13 @@ El comando es disparado si:
<target>Nuevo</target>
<source>Open...</source>
-<target>Abrir…</target>
+<target>Abrir...</target>
<source>Save</source>
<target>Guardar</target>
<source>Save as...</source>
-<target>Guardar como…</target>
+<target>Guardar como...</target>
<source>View type:</source>
<target>Ver tipo:</target>
@@ -950,9 +1004,6 @@ El comando es disparado si:
<source>Include:</source>
<target>Incluir:</target>
-<source>Exclude:</source>
-<target>Excluir:</target>
-
<source>Show examples</source>
<target>Mostrar ejemplos</target>
@@ -969,7 +1020,7 @@ El comando es disparado si:
<target>Máximo:</target>
<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source>
-<target>Seleccione reglas para excluir archivos durante la sincronización. Indique rutas relativas a la carpeta emparejada correspondiente.</target>
+<target>Elija reglas de filtrado para excluir archivos de la sincronización. Indique rutas relativas correspondientes a la carpeta emparejada.</target>
<source>C&lear</source>
<target>B&orrar</target>
@@ -1036,8 +1087,11 @@ El comando es disparado si:
<source>Arrange folder pair</source>
<target>Reorganizar pares de carpetas</target>
-<source>Enter your SFTP login details:</source>
-<target>Escriba sus datos de conexión SFTP:</target>
+<source>Enter your login details:</source>
+<target>Escriba sus datos de conexión:</target>
+
+<source>Connection type:</source>
+<target>Tipo de conexión:</target>
<source>Server name or IP address:</source>
<target>Nombre o dirección IP del servidor:</target>
@@ -1045,11 +1099,29 @@ El comando es disparado si:
<source>Port:</source>
<target>Puerto:</target>
+<source>Encryption:</source>
+<target>Cifrado:</target>
+
+<source>&Disabled</source>
+<target>&Inactivo</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&SSL/TLS explícito</target>
+
+<source>Authentication:</source>
+<target>Autenticación:</target>
+
+<source>&Password</source>
+<target>&Contraseña</target>
+
+<source>&Key file</source>
+<target>Archivo de &clave</target>
+
<source>User name:</source>
<target>Usuario:</target>
-<source>Password:</source>
-<target>Contraseña:</target>
+<source>Private key file:</source>
+<target>Archivo de clave privada:</target>
<source>&Show password</source>
<target>Mo&strar constraseña</target>
@@ -1057,6 +1129,27 @@ El comando es disparado si:
<source>Directory on server:</source>
<target>Directorio del servidor:</target>
+<source>Performance improvements:</source>
+<target>Mejoras en el rendimiento:</target>
+
+<source>How to get best performance?</source>
+<target>¿Cómo obtener el mejor rendimiento?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>Conexiones SSH para lectura de directorios:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Rango sugerido: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Canales SFTP por conexión:</target>
+
+<source>Detect server limit</source>
+<target>Detectar el límite del servidor</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 conexiones x 10 canales = lectura de directorios 20 veces más rápida</target>
+
<source>Select a directory on the server:</source>
<target>Seleccione un directorio en el servidor:</target>
@@ -1088,7 +1181,7 @@ El comando es disparado si:
<target>Elementos:</target>
<source>Synchronizing...</source>
-<target>Sincronizando…</target>
+<target>Sincronizando...</target>
<source>Minimize to notification area</source>
<target>Minimizar en el área de notificación</target>
@@ -1186,6 +1279,9 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Source code written in C++ using:</source>
<target>Código fuente C++ con soporte de :</target>
+<source>Donation details</source>
+<target>Detalles para donación</target>
+
<source>If you like FreeFileSync:</source>
<target>Si te resulta útil FreeFileSync:</target>
@@ -1195,7 +1291,7 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Feedback and suggestions are welcome</source>
<target>Tus comentarios y sugerencias son bienvenidos :</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Página de inicio</target>
<source>Email</source>
@@ -1207,8 +1303,26 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Many thanks for localization:</source>
<target>Agradecimientos a los traductores :</target>
-<source>SSH File Transfer Protocol</source>
-<target>Protocolo de transferencia de archivos SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Active FreeFileSync Donation Edition por uno de los métodos siguientes:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Activar por internet ahora:</target>
+
+<source>Activate online</source>
+<target>Activar en línea</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Recuperar una clave de activación sin conexión desde la dirección URL siguiente :</target>
+
+<source>&Copy to clipboard</source>
+<target>&Copiar al portapapeles</target>
+
+<source>Enter activation key:</source>
+<target>Introduzca la clave de activación:</target>
+
+<source>Activate offline</source>
+<target>Activar sin conexión</target>
<source>Save as Batch Job</source>
<target>Guardar como tarea por lotes</target>
@@ -1225,6 +1339,9 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Select Time Span</source>
<target>Seleccionar duración</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Opciones</target>
@@ -1246,8 +1363,8 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Overview</source>
<target>Vista general</target>
-<source>&Download</source>
-<target>&Descargar</target>
+<source>&Show details</source>
+<target>Mo&strar detalles</target>
<source>A new version of FreeFileSync is available:</source>
<target>Una nueva versión de FreeFileSync está disponible:</target>
@@ -1316,7 +1433,7 @@ Se garantiza un estado coherente incluso en caso de error grave.
<target>Excluir temporalmente</target>
<source>&Copy to...</source>
-<target>&Copiar hacia…</target>
+<target>&Copiar hacia...</target>
<source>&Delete</source>
<target>&Eliminar</target>
@@ -1340,7 +1457,7 @@ Se garantiza un estado coherente incluso en caso de error grave.
<target>Grande</target>
<source>Select time span...</source>
-<target>Seleccionar duración…</target>
+<target>Seleccionar duración...</target>
<source>Show "%x"</source>
<target>Mostrar "%x"</target>
@@ -1442,7 +1559,7 @@ Se garantiza un estado coherente incluso en caso de error grave.
<target>Lista de archivos exportada</target>
<source>Searching for program updates...</source>
-<target>Buscando actualizaciones del programa…</target>
+<target>Buscando actualizaciones del programa...</target>
<source>Close progress dialog</source>
<target>Cerrar diálogo de progreso</target>
@@ -1460,13 +1577,13 @@ Se garantiza un estado coherente incluso en caso de error grave.
<target>Pausado</target>
<source>Initializing...</source>
-<target>Inicializando…</target>
+<target>Inicializando...</target>
<source>Scanning...</source>
-<target>Escaneando…</target>
+<target>Escaneando...</target>
<source>Comparing content...</source>
-<target>Comparando contenido…</target>
+<target>Comparando contenido...</target>
<source>Completed</source>
<target>Terminado</target>
@@ -1486,8 +1603,17 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Log</source>
<target>Registro</target>
-<source>Loading...</source>
-<target>Cargando…</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Los archivos de instalación están dañados. Reinstale FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>¡Muchas gracias, %x, por su contribución y ayuda!</target>
+
+<source>Password:</source>
+<target>Contraseña:</target>
+
+<source>Key password:</source>
+<target>Contraseña de clave:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>&Show</source>
<target>Mo&strar</target>
+<source>Downloading update...</source>
+<target>Descargando actualización...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identificar archivos iguales por la hora de modificación y por tamaño.</target>
@@ -1639,12 +1768,33 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Percentage</source>
<target>Porcentaje</target>
+<source>Failed to retrieve update information.</source>
+<target>Fallo al recuperar información de actualización.</target>
+
+<source>Automatic updates:</source>
+<target>Actualizaciones automáticas:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Requiere FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Buscar actualizaciones del programa</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>¿Desea actualizar automáticamente o descargar manualmente desde la página de FreeFileSync ahora?</target>
+
+<source>&Auto-update</source>
+<target>&Actualizar autmáticamente</target>
+
+<source>&Home page</source>
+<target>&Página de inicio</target>
+
<source>Download now?</source>
<target>¿Descargar ahora?</target>
+<source>&Download</source>
+<target>&Descargar</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync está actualizado.</target>
@@ -1657,14 +1807,20 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Consistency check failed for %x.</source>
<target>Fallo en la comprobación de coherencia para %x.</target>
-<source>Cannot find system function %x.</source>
-<target>No se puede encontrar la función del sistema %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>La instalación quedó registrada par un sistema operativo distinto.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Fallo al activar FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Clave de activación incorrecta.</target>
<source>Unable to register to receive system messages.</source>
<target>No es posible registrar la recepción de mensajes sistema.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Los archivos de instalación están dañados. Reinstale FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>No se puede encontrar la función del sistema %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>No es posible registrar las notificaciones de dispositivo para %x.</target>
@@ -1696,9 +1852,6 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Cannot copy attributes from %x to %y.</source>
<target>No se puedem copiar los atributos desde %x hacia %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>El tipo de objeto %x no esta soportado:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>El archivo de configuración %x está incompleto. Los elementos ausentes se definirán con valores predeterminados.</target>
-<source>Internet access failed.</source>
-<target>Fallo de acceso a Internet.</target>
-
<source>Prepare installation</source>
<target>Preparar la instalación</target>
@@ -1822,18 +1972,12 @@ Se garantiza un estado coherente incluso en caso de error grave.
<source>Edit with FreeFileSync</source>
<target>Modificar con FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>¡Muchas gracias por su contribución y ayuda!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Se alcanzó el limite diario de instalaciones de FreeFileSync para contribuidores.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>¿Desea descargar la versión normal desde la página de FreeFileSync ahora?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>No se puede instalar la version portátil en la carpeta seleccionada.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Elija el tipo de instalación local o seleccione otra carpeta de instalación.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>El modo de instalación silenciosa sólo está disponible para FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/swedish.lng b/FreeFileSync/Build/Languages/swedish.lng
index 2447e8f6..b90d7114 100755
--- a/FreeFileSync/Build/Languages/swedish.lng
+++ b/FreeFileSync/Build/Languages/swedish.lng
@@ -22,12 +22,12 @@
<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>Creating folder %x</source>
-<target>Skapar mappen %x</target>
-
<source>Creating file %x</source>
<target>Skapar fil %x</target>
+<source>Creating folder %x</source>
+<target>Skapar mappen %x</target>
+
<source>Creating symbolic link %x</source>
<target>Skapar den symboliska länken %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Om detta fel ignoreras, kommer mapparna att betraktas som tomma. Saknade mappar skapas automatiskt vid behov.</target>
-<source>A folder input field is empty.</source>
-<target>Ett inmatningsfält är tomt.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Motsvarande mapp kommer att betraktas som tom.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Följande mappsökvägar är beroende av varandra:</target>
-
<source>File %x has an invalid date.</source>
<target>Filen %x har ett ogiltigt datum.</target>
<source>Date:</source>
<target>Datum:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Filerna %x har samma datum men olika storlek.</target>
+<source>Files have the same date but a different size.</source>
+<target>Filerna har samma datum men olika storlek.</target>
<source>Size:</source>
<target>Storlek:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Innehållsjämförelse skippades för undantagna filer %x.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Innehållet jämfördes inte för undantagna filer.</target>
<source>Items differ in attributes only</source>
<target>Endast attribut skiljer objekten åt</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Startar jämförelse</target>
+<source>A folder input field is empty.</source>
+<target>Ett inmatningsfält är tomt.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Motsvarande mapp kommer att betraktas som tom.</target>
+
+<source>Exclude:</source>
+<target>Undanta:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>En basmapp i ett katalogpar, ligger i en annan basmapp.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Mappen bör undantas från synkronisering, via filtrering.</target>
+
<source>Calculating sync directions...</source>
<target>Beräknar synkroniseringsmappar...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Uppdatera attribut på höger sida</target>
-<source>Cannot write permissions of %x.</source>
-<target>Kan inte skriva behörigheter för %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Åtgärden stöder inte olika basmapptyper.</target>
-
<source>Cannot write file %x.</source>
<target>Filen %x kan inte skrivas.</target>
@@ -267,39 +267,45 @@ Förväntad: %x byte
Aktuell: %y byte
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Kan inte skriva behörigheter för %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Åtgärden stöder inte olika basmapptyper.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Kan inte kopiera den symboliska länken %x till %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Kan inte flytta filen %x till %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Kan inte räkna upp %x.</target>
-
-<source>Cannot read file attributes of %x.</source>
-<target>Kan inte läsa filattribut för %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Kan inte ansluta till %x.</target>
-<source>Cannot find %x.</source>
-<target>Kan inte hitta %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Kunde inte hämta information om server %x.</target>
-<source>Cannot open file %x.</source>
+<source>Cannot open directory %x.</source>
<target>Kan inte öppna %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Kan inte läsa mappen %x.</target>
+
<source>Cannot read file %x.</source>
<target>Filen %x kan inte läsas in.</target>
-<source>Cannot find device %x.</source>
-<target>Kan inte hitta enheten %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Kan inte läsa filattribut för %x.</target>
<source>Cannot create directory %x.</source>
<target>Kan inte skapa mappen %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Kan inte ta bort mappen %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Filen %x kan inte tas bort.</target>
+<source>Cannot delete directory %x.</source>
+<target>Kan inte ta bort mappen %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Kan inte ändra tidsangivelsen för %x.</target>
@@ -309,23 +315,65 @@ Aktuell: %y byte
<source>Cannot resolve symbolic link %x.</source>
<target>Den symboliska länken %x kan inte matchas.</target>
-<source>Cannot open directory %x.</source>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Kan inte att flytta %x till papperskorgen.</target>
+
+<source>Cannot open file %x.</source>
<target>Kan inte öppna %x.</target>
+<source>Cannot find device %x.</source>
+<target>Kan inte hitta enheten %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Kan inte hitta %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Objekttyp %x stöds ej:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Kan inte ta bort den symboliska länken %x.</target>
+
<source>Cannot determine free disk space for %x.</source>
<target>Kan inte avgöra ledigt utrymme på %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Kan inte att flytta %x till papperskorgen.</target>
-
<source>Incorrect command line:</source>
<target>Felaktig kommandorad:</target>
-<source>Error Code %x:</source>
-<target>Felkod %x:</target>
+<source>Error Code %x</source>
+<target>Felkod %x</target>
-<source>Unable to connect to %x.</source>
-<target>Kan inte ansluta till %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Servern stödjer inte autentisering via %x.</target>
+
+<source>Required:</source>
+<target>Utrymmeskrav:</target>
+
+<source>Unable to access %x.</source>
+<target>Kan inte komma åt %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Åtgärdens tidsgräns överskreds efter 1 sekund.</pluralform>
+<pluralform>Åtgärdens tidsgräns överskreds efter %x sekunder.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Kan inte vänta på fler än 1 anslutning åt gången.</pluralform>
+<pluralform>Kan inte vänta på fler än %x anslutningar åt gången.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Aktiva anslutningar: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Kunde inte öppna SFTP-kanal nummer %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Aktuell: %y byte
<source>Database file %x does not yet exist.</source>
<target>Databasfilen %x finns ännu inte.</target>
-<source>Database file is corrupt:</source>
-<target>Databafilen är korrupt:</target>
+<source>Database file is corrupted:</source>
+<target>Databasfilen är skadad:</target>
+
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Datapasfilen innehåller ännu ingen information om senaste synkronisering.</target>
-<source>Database files do not share a common session.</source>
-<target>Databasfilerna har ingen gemensam session.</target>
+<source>Loading file %x...</source>
+<target>Läser in filen %x...</target>
+
+<source>Saving file %x...</source>
+<target>Sparar %x...</target>
<source>Searching for folder %x...</source>
<target>Söker efter mappen %x...</target>
@@ -390,9 +444,6 @@ Aktuell: %y byte
<source>Detecting abandoned lock...</source>
<target>Söker övergivna lås...</target>
-<source>Saving file %x...</source>
-<target>Sparar %x...</target>
-
<source>Items processed:</source>
<target>Processade poster:</target>
@@ -647,14 +698,23 @@ Kommandot triggas om:
<source>Not enough free disk space available in:</source>
<target>Ej tillräckligt ledigt diskutrymme på:</target>
-<source>Required:</source>
-<target>Utrymmeskrav:</target>
-
<source>Available:</source>
<target>Tillgängligt:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Flera katalogpar skriver till samma undermapp. Kontrollera dina inställningar.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Vissa filer kommer att synkroniseras som en del av flera basmappar.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>För att undvika konflikter kan du använda ett undantagsfilter, så att varje uppdaterad fil behandlas i endast en basmapp.</target>
+
+<source>Versioning folder:</source>
+<target>Versionshanteringsmapp:</target>
+
+<source>Base folder:</source>
+<target>Basmapp:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Versionshanteringsmappen kommer att synkroniseras, eftersom den ligger i en basmapp.</target>
<source>Synchronizing folder pair:</source>
<target>Synkroniserar katalogpar:</target>
@@ -662,6 +722,9 @@ Kommandot triggas om:
<source>Generating database...</source>
<target>Skapar databas...</target>
+<source>Loading...</source>
+<target>Läser in...</target>
+
<source>job name</source>
<target>åtgärdsnamn</target>
@@ -785,15 +848,6 @@ Kommandot triggas om:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Välj en mapp på i ett lokalt filsystem, nätverk eller en MTP-enhet.</target>
-<source>SFTP folder</source>
-<target>SFTP-mapp</target>
-
-<source>Select SFTP folder</source>
-<target>Välj SFTP-mapp</target>
-
-<source>Select alternative folder type</source>
-<target>Välj alternativ mapptyp</target>
-
<source>&New</source>
<target>&Nytt</target>
@@ -839,11 +893,8 @@ Kommandot triggas om:
<source>&Tools</source>
<target>&Verktyg</target>
-<source>&Check for new version</source>
-<target>&Sök efter uppdateringar</target>
-
-<source>&Check now</source>
-<target>&Sök nu</target>
+<source>&Check for updates now</source>
+<target>&Sök efter uppdateringar nu</target>
<source>Check &automatically once a week</source>
<target>Sök &automatiskt en gång per vecka</target>
@@ -863,6 +914,9 @@ Kommandot triggas om:
<source>Remove folder pair</source>
<target>Ta bort katalogpar</target>
+<source>Access online storage</source>
+<target>Anslut fjärrlagring</target>
+
<source>Swap sides</source>
<target>Byt sida</target>
@@ -950,9 +1004,6 @@ Kommandot triggas om:
<source>Include:</source>
<target>Inkludera:</target>
-<source>Exclude:</source>
-<target>Undanta:</target>
-
<source>Show examples</source>
<target>Visa exempel</target>
@@ -1036,8 +1087,11 @@ Kommandot triggas om:
<source>Arrange folder pair</source>
<target>Arrangera katalogpar</target>
-<source>Enter your SFTP login details:</source>
-<target>Ange dina SFTP-inloggningsuppgifter:</target>
+<source>Enter your login details:</source>
+<target>Ange dina inloggningsuppgifter:</target>
+
+<source>Connection type:</source>
+<target>Anslutningstyp:</target>
<source>Server name or IP address:</source>
<target>Servernamn eller IP-adress:</target>
@@ -1045,11 +1099,29 @@ Kommandot triggas om:
<source>Port:</source>
<target>Port:</target>
+<source>Encryption:</source>
+<target>Kryptering:</target>
+
+<source>&Disabled</source>
+<target>&Inaktiverad</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Explicit SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Autentisering:</target>
+
+<source>&Password</source>
+<target>&Lösenord</target>
+
+<source>&Key file</source>
+<target>&Nyckel</target>
+
<source>User name:</source>
<target>Användarnamn:</target>
-<source>Password:</source>
-<target>Lösenord:</target>
+<source>Private key file:</source>
+<target>Privat nyckelfil:</target>
<source>&Show password</source>
<target>&Visa lösenordet</target>
@@ -1057,6 +1129,27 @@ Kommandot triggas om:
<source>Directory on server:</source>
<target>Målmapp på servern:</target>
+<source>Performance improvements:</source>
+<target>Prestandaförbättringar:</target>
+
+<source>How to get best performance?</source>
+<target>Hur får man ut bästa prestanda?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH-anslutningar för katalogläsning:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Föreslaget intervall: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP-kanaler per anslutning:</target>
+
+<source>Detect server limit</source>
+<target>Identifiera serverbegränsning</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 anslutningar x 10 kanaler = 20 gånger snabbare katalogläsning</target>
+
<source>Select a directory on the server:</source>
<target>Välj en mapp på servern:</target>
@@ -1186,6 +1279,9 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Source code written in C++ using:</source>
<target>Källkod skriven i C++ med hjälp av:</target>
+<source>Donation details</source>
+<target>Donationsuppgifter</target>
+
<source>If you like FreeFileSync:</source>
<target>Om du gillar FreeFileSync:</target>
@@ -1195,7 +1291,7 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Feedback and suggestions are welcome</source>
<target>Återkoppling och förslag är välkommna</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Hemsida</target>
<source>Email</source>
@@ -1207,8 +1303,26 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Many thanks for localization:</source>
<target>Tack för översättning:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH filöverföringsprotokoll</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Aktivera FreeFileSync Donation Edition med en av följande metoder:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Aktivera via internet nu:</target>
+
+<source>Activate online</source>
+<target>Ativera online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Hämta en offline-aktivering från följande URL:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Kopiera till urklipp</target>
+
+<source>Enter activation key:</source>
+<target>Ange aktiveringsnyckel:</target>
+
+<source>Activate offline</source>
+<target>Aktivera offline</target>
<source>Save as Batch Job</source>
<target>Spara som batch-fil</target>
@@ -1225,6 +1339,9 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Select Time Span</source>
<target>Välj tidsrymd</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Alternativ</target>
@@ -1246,8 +1363,8 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Overview</source>
<target>Översikt</target>
-<source>&Download</source>
-<target>&Ladda ner</target>
+<source>&Show details</source>
+<target>&Visa detaljerat</target>
<source>A new version of FreeFileSync is available:</source>
<target>Det finns en ny version av FreeFileSync:</target>
@@ -1486,8 +1603,17 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Log</source>
<target>Logg</target>
-<source>Loading...</source>
-<target>Läser in...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Installationsfilerna är skadade. Installera om FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Tack %x, för din donation och ditt stöd!</target>
+
+<source>Password:</source>
+<target>Lösenord:</target>
+
+<source>Key password:</source>
+<target>Nyckellösenord:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>&Show</source>
<target>&Visa</target>
+<source>Downloading update...</source>
+<target>Laddar ner uppdatering...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Identifiera likadana filer genom att jämföra tidsstämpling och filstorlek.</target>
@@ -1639,11 +1768,32 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Percentage</source>
<target>Procent</target>
+<source>Failed to retrieve update information.</source>
+<target>Kunde inte hämta uppdateringsinformation.</target>
+
+<source>Automatic updates:</source>
+<target>Automatiska uppdateringar:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Kräver FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Sök efter programuppdateringar</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Vill du uppdatera automatiskt nu, eller ladda ner manuellt från FreeFileSyncs hemsida?</target>
+
+<source>&Auto-update</source>
+<target>&Auto-uppdatera</target>
+
+<source>&Home page</source>
+<target>&Hemsida</target>
+
<source>Download now?</source>
-<target>Ladda ner nu?</target>
+<target>Vill du ladda ner nu?</target>
+
+<source>&Download</source>
+<target>&Ladda ner</target>
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync är uppdaterad.</target>
@@ -1657,14 +1807,20 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Consistency check failed for %x.</source>
<target>Konsekvenskontroll misslyckades för %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Kan inte hitta systemfunktion %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Installationen har registrerats på ett annat operativsystem.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Kunde inte aktivera FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Felaktig aktiveringsnyckel.</target>
<source>Unable to register to receive system messages.</source>
<target>Det gick inte att registrera mottagning av systemmeddelanden.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Installationsfilerna är skadade. Återinstallare FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Kan inte hitta systemfunktion %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Kunde inte registrera enhetsavisering för %x.</target>
@@ -1696,9 +1852,6 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Cannot copy attributes from %x to %y.</source>
<target>Kan inte kopiera attribut från %x till %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Objekttyp %x stöds ej:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,9 +1903,6 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Konfigurationsfilen %x är inte komplett. De saknade elementen kommer att anges till standardvärdet.</target>
-<source>Internet access failed.</source>
-<target>Internetåtkomst misslyckades.</target>
-
<source>Prepare installation</source>
<target>Förbered installation</target>
@@ -1822,18 +1972,12 @@ Detta garanterar ett konsekvent tillstånd även vid allvarliga fel.
<source>Edit with FreeFileSync</source>
<target>Redigera med FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Tack för donationen och ditt stöd!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Denna FreeFileSync-installerare för donatorer har nått sin dagliga installationsbegränsning.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Vill du ladda ner den reguljära versionen från FreeFileSyncs hemsida nu?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Portabel version kan inte installeras i den valda mappen.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Välj lokal installationstyp eller välj en annan mapp för installationen.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Tyst installationsläge är endast tillgängligt i FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Languages/turkish.lng b/FreeFileSync/Build/Languages/turkish.lng
index 6590adbd..f6651925 100755
--- a/FreeFileSync/Build/Languages/turkish.lng
+++ b/FreeFileSync/Build/Languages/turkish.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Varsayılan eşitleme yönleri ayarlanıyor: Yeni dosyalar eski dosyaların üzerine yazılacak.</target>
-<source>Creating folder %x</source>
-<target>%x klasörü oluşturuluyor</target>
-
<source>Creating file %x</source>
<target>%x dosyası oluşturuluyor</target>
+<source>Creating folder %x</source>
+<target>%x klasörü oluşturuluyor</target>
+
<source>Creating symbolic link %x</source>
<target>%x sembolik bağlantısı oluşturuluyor</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Bu sorun yoksayılırsa klasörler boş olarak kabul edilir. Eksik klasörler gerek duyulduğunda otomatik olarak oluşturulur.</target>
-<source>A folder input field is empty.</source>
-<target>Bir klasör giriş alanı boş.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Karşıdaki klasör boş olarak kabul edilecek.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Şu klasörler birbirine bağlı:</target>
-
<source>File %x has an invalid date.</source>
<target>%x dosyasının tarihi geçersiz.</target>
<source>Date:</source>
<target>Tarih:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>%x dosyalarının tarihleri aynı fakat boyutları farklı.</target>
+<source>Files have the same date but a different size.</source>
+<target>Dosyaların tarihleri aynı ancak boyutları farklı.</target>
<source>Size:</source>
<target>Boyut:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Katılmayan %x dosya için içerik karşılaştırması atlandı.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Katılmayan dosyalar için içerik karşılaştırması atlandı.</target>
<source>Items differ in attributes only</source>
<target>Yalnız öznitelikleri farklı olan ögeler</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Karşılaştırmaya başlanıyor</target>
+<source>A folder input field is empty.</source>
+<target>Bir klasör giriş alanı boş.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Karşıdaki klasör boş olarak kabul edilecek.</target>
+
+<source>Exclude:</source>
+<target>Katılmayacak Ögeler:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Klasör çiftindeki temel bir klasör diğerinin içinde bulunuyor.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Süzgeç kullanılarak klasör eşitlemeye katılmamalı.</target>
+
<source>Calculating sync directions...</source>
<target>Eşitleme yönleri hesaplanıyor...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Sağdaki öznitelikler güncellensin</target>
-<source>Cannot write permissions of %x.</source>
-<target>%x izinleri yazılamadı.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Farklı temel klasör tipleri üzerindeki işlemler desteklenmiyor.</target>
-
<source>Cannot write file %x.</source>
<target>%x dosyası yazılamadı.</target>
@@ -267,39 +267,45 @@ Beklenen: %x bayt
Gerçekleşen: %y bayt
</target>
+<source>Cannot write permissions of %x.</source>
+<target>%x izinleri yazılamadı.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Farklı temel klasör türleri üzerindeki işlemler desteklenmiyor.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>%x sembolik bağlantısı %y hedefine kopyalanamadı.</target>
<source>Cannot move file %x to %y.</source>
<target>%x dosyası %y hedefine taşınamadı.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>%x klasörü hesaplanamadı.</target>
+<source>Unable to connect to %x.</source>
+<target>%x üzerine bağlanılamadı.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>%x dosyasının öznitelikleri okunamadı.</target>
+<source>Failed to get information about server %x.</source>
+<target>%x sunucusu hakkında bilgi alınamadı.</target>
-<source>Cannot find %x.</source>
-<target>%x bulunamadı.</target>
+<source>Cannot open directory %x.</source>
+<target>%x klasörü açılamadı.</target>
-<source>Cannot open file %x.</source>
-<target>%x dosyası açılamadı.</target>
+<source>Cannot read directory %x.</source>
+<target>%x klasörü okunamadı.</target>
<source>Cannot read file %x.</source>
<target>%x dosyası okunamadı.</target>
-<source>Cannot find device %x.</source>
-<target>%x aygıtı bulunamadı.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>%x dosyasının öznitelikleri okunamadı.</target>
<source>Cannot create directory %x.</source>
<target>%x klasörü oluşturulamadı.</target>
-<source>Cannot delete directory %x.</source>
-<target>%x klasörü silinemedi.</target>
-
<source>Cannot delete file %x.</source>
<target>%x dosyası silinemedi.</target>
+<source>Cannot delete directory %x.</source>
+<target>%x klasörü silinemedi.</target>
+
<source>Cannot write modification time of %x.</source>
<target>%x dosyasının değişiklik tarihi yazılamadı.</target>
@@ -309,23 +315,65 @@ Gerçekleşen: %y bayt
<source>Cannot resolve symbolic link %x.</source>
<target>%x sembolik bağlantısı çözümlenemedi.</target>
-<source>Cannot open directory %x.</source>
-<target>%x klasörü açılamadı.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x çöp kutusuna atılamadı.</target>
+
+<source>Cannot open file %x.</source>
+<target>%x dosyası açılamadı.</target>
+
+<source>Cannot find device %x.</source>
+<target>%x aygıtı bulunamadı.</target>
+
+<source>Cannot find %x.</source>
+<target>%x bulunamadı.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>%x ögesi türü desteklenmiyor:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>%x sembolik bağlantısı silinemedi.</target>
<source>Cannot determine free disk space for %x.</source>
<target>%x için boş disk alanı belirlenemedi.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>%x çöp kutusuna atılamadı.</target>
-
<source>Incorrect command line:</source>
<target>Satırdaki komut geçersiz:</target>
-<source>Error Code %x:</source>
-<target>Hata Kodu %x:</target>
+<source>Error Code %x</source>
+<target>Hata Kodu %x</target>
-<source>Unable to connect to %x.</source>
-<target>%x üzerine bağlanılamadı.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Sunucu %x üzerinden kimlik doğrulamasını desteklemiyor.</target>
+
+<source>Required:</source>
+<target>Zorunlu:</target>
+
+<source>Unable to access %x.</source>
+<target>%x üzerine erişilemedi.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>İşlem 1 saniye sonunda zaman aşımına uğradı.</pluralform>
+<pluralform>İşlem %x saniye sonunda zaman aşımına uğradı.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Aynı anda 1 taneden fazla bağlantı beklenemez.</pluralform>
+<pluralform>Aynı anda %x taneden fazla bağlantı beklenemez.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Etkin bağlantı sayısı: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>%x SFTP kanal numarası açılamadı.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -357,11 +405,17 @@ Gerçekleşen: %y bayt
<source>Database file %x does not yet exist.</source>
<target>%x veritabanı dosyası henüz yok.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Veritabanı dosyası bozulmuş:</target>
-<source>Database files do not share a common session.</source>
-<target>Veritabanı dosyaları ortak bir oturumu paylaşamaz.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Veritabanı dosyalarında henüz son eşitleme bilgileri yok.</target>
+
+<source>Loading file %x...</source>
+<target>%x dosyaları yükleniyor...</target>
+
+<source>Saving file %x...</source>
+<target>%x dosyası kaydediliyor...</target>
<source>Searching for folder %x...</source>
<target>%x klasörü aranıyor...</target>
@@ -390,9 +444,6 @@ Gerçekleşen: %y bayt
<source>Detecting abandoned lock...</source>
<target>Kaldırılmış kilit algılanıyor...</target>
-<source>Saving file %x...</source>
-<target>%x dosyası kaydediliyor...</target>
-
<source>Items processed:</source>
<target>İşlenen öge:</target>
@@ -647,14 +698,23 @@ Komut şu durumlarda yürütülür:
<source>Not enough free disk space available in:</source>
<target>Şurada yeterli disk alanı yok :</target>
-<source>Required:</source>
-<target>Zorunlu:</target>
-
<source>Available:</source>
<target>Kullanılabilir:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Çoklu klasör çiftleri ortak bir klasöre yazılır. Lütfen ayarlarınızı gözden geçirin.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Bazı dosyalar çoklu temel klasörlerin bir parçası olarak eşitlenecek.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Çakışmaları engellemek için katmama süzgeçleri ayarlayarak güncellenen her dosyanın yalnız bir temel klasör olarak değerlendirilmesini sağlayın.</target>
+
+<source>Versioning folder:</source>
+<target>Sürüm klasörü:</target>
+
+<source>Base folder:</source>
+<target>Temel klasör:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Sürüm klasörü bir temel klasör içinde bulunduğundan eşitlenecek.</target>
<source>Synchronizing folder pair:</source>
<target>Eşitlenen klasör çifti:</target>
@@ -662,6 +722,9 @@ Komut şu durumlarda yürütülür:
<source>Generating database...</source>
<target>Veritabanı oluşturuluyor...</target>
+<source>Loading...</source>
+<target>Yükleniyor...</target>
+
<source>job name</source>
<target>iş adı</target>
@@ -785,15 +848,6 @@ Komut şu durumlarda yürütülür:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Lütfen yerel dosya sistemi, ağ ya da MTP aygıtı üzerinde bulunan bir klasör seçin.</target>
-<source>SFTP folder</source>
-<target>SFTP klasörü</target>
-
-<source>Select SFTP folder</source>
-<target>SFTP klasörünü seçin</target>
-
-<source>Select alternative folder type</source>
-<target>Alternatif klasör tipini seçin</target>
-
<source>&New</source>
<target>&Yeni</target>
@@ -839,11 +893,8 @@ Komut şu durumlarda yürütülür:
<source>&Tools</source>
<target>&Araçlar</target>
-<source>&Check for new version</source>
-<target>&Güncelleme Denetimi</target>
-
-<source>&Check now</source>
-<target>Şimdi &Denetle</target>
+<source>&Check for updates now</source>
+<target>&Güncellemeleri Denetle</target>
<source>Check &automatically once a week</source>
<target>&Haftada Bir Denetle</target>
@@ -863,6 +914,9 @@ Komut şu durumlarda yürütülür:
<source>Remove folder pair</source>
<target>Klasör Çiftini Sil</target>
+<source>Access online storage</source>
+<target>Çevrimiçi Depolama Erişimi</target>
+
<source>Swap sides</source>
<target>Sağ ve Sol Tarafları Değiştir</target>
@@ -950,9 +1004,6 @@ Komut şu durumlarda yürütülür:
<source>Include:</source>
<target>Katılacak Ögeler:</target>
-<source>Exclude:</source>
-<target>Katılmayacak Ögeler:</target>
-
<source>Show examples</source>
<target>Örneklere Bakın</target>
@@ -1036,8 +1087,11 @@ Komut şu durumlarda yürütülür:
<source>Arrange folder pair</source>
<target>Klasör çiftini belirleyin</target>
-<source>Enter your SFTP login details:</source>
-<target>SFTP oturum açma bilgilerinizi yazın:</target>
+<source>Enter your login details:</source>
+<target>Oturum açma ayrıntılarınızı yazın:</target>
+
+<source>Connection type:</source>
+<target>Bağlantı Türü:</target>
<source>Server name or IP address:</source>
<target>Sunucu Adı / IP Adresi:</target>
@@ -1045,11 +1099,29 @@ Komut şu durumlarda yürütülür:
<source>Port:</source>
<target>Kapı:</target>
+<source>Encryption:</source>
+<target>Şifreleme:</target>
+
+<source>&Disabled</source>
+<target>&Devre Dışı</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Açık SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Kimlik Doğrulaması:</target>
+
+<source>&Password</source>
+<target>&Parola</target>
+
+<source>&Key file</source>
+<target>Anahtar &Dosyası</target>
+
<source>User name:</source>
<target>Kullanıcı Adı:</target>
-<source>Password:</source>
-<target>Parola:</target>
+<source>Private key file:</source>
+<target>Özel Anahtar Dosyası:</target>
<source>&Show password</source>
<target>Parola &Görüntülensin</target>
@@ -1057,6 +1129,27 @@ Komut şu durumlarda yürütülür:
<source>Directory on server:</source>
<target>Sunucudaki Klasör:</target>
+<source>Performance improvements:</source>
+<target>Başarım İyileştirmeleri:</target>
+
+<source>How to get best performance?</source>
+<target>En iyi başarım nasıl elde edilir?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH Klasör Okuma Bağlantı Sayısı:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Önerilen Aralık: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>Bir Bağlantı için SFTP Kanalı Sayısı:</target>
+
+<source>Detect server limit</source>
+<target>Sunucu Sınırını Bul</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 bağlantı x 10 kanal = 20 kat hızlı klasör okuma</target>
+
<source>Select a directory on the server:</source>
<target>Sunucu üzerinde bir klasör seçin:</target>
@@ -1175,7 +1268,7 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<target>Açıklama</target>
<source>Show hidden dialogs again</source>
-<target>Gizlenmiş pencereler yeniden görüntülensin</target>
+<target>Gizlenmiş Pencereleri Yeniden Görüntüle</target>
<source>Show all permanently hidden dialogs and warning messages again</source>
<target>Kalıcı olarak gizlenmiş tüm ileti ve uyarılar yeniden görüntülenir</target>
@@ -1186,17 +1279,20 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Source code written in C++ using:</source>
<target>Kaynak kodu C++ kullanılarak yazılmıştır:</target>
+<source>Donation details</source>
+<target>Bağış Bilgileri</target>
+
<source>If you like FreeFileSync:</source>
<target>FreeFileSync hoşunuza gittiyse:</target>
<source>Donate with PayPal</source>
-<target>PayPal üzerinden bağış yapın</target>
+<target>PayPal Üzerinden Bağış Yapın</target>
<source>Feedback and suggestions are welcome</source>
<target>Öneri ve geri bildirimlerinizi bekleriz</target>
-<source>Homepage</source>
-<target>Web Sitesi</target>
+<source>Home page</source>
+<target>Ana Sayfa</target>
<source>Email</source>
<target>E-posta</target>
@@ -1207,8 +1303,26 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Many thanks for localization:</source>
<target>Çeviriler için çok teşekkürler:</target>
-<source>SSH File Transfer Protocol</source>
-<target>SSH Dosya Aktarımı İletişim Kuralı</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>FreeFileSync Donation Edition şu yöntemlerden biri ile etkinleştirilebilir:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. İnternet üzerinden etkinleştirme:</target>
+
+<source>Activate online</source>
+<target>Çevrimiçi Etkinleştir</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>Şu adresten bir çevrimdışı etkinleştirme anahtarı alarak:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Panoya Kopyala</target>
+
+<source>Enter activation key:</source>
+<target>Etkinleştirme Anahtarını Yazın:</target>
+
+<source>Activate offline</source>
+<target>Çevrimdışı Etkinleştir</target>
<source>Save as Batch Job</source>
<target>Toplu İş Olarak Kaydet</target>
@@ -1225,6 +1339,9 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Select Time Span</source>
<target>Zaman Aralığı</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Ayarlar</target>
@@ -1246,8 +1363,8 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Overview</source>
<target>Genel</target>
-<source>&Download</source>
-<target>İn&dirin</target>
+<source>&Show details</source>
+<target>&Ayrıntılara Bakın</target>
<source>A new version of FreeFileSync is available:</source>
<target>Yeni bir FreeFileSync sürümü yayınlanmış:</target>
@@ -1486,8 +1603,17 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Log</source>
<target>Günlük</target>
-<source>Loading...</source>
-<target>Yükleniyor...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Kurulum dosyaları bozulmuş. Lütfen FreeFileSync uygulamasını yeniden kurun.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Sevgili %x, bağışın ve desteğin için teşekkürler!</target>
+
+<source>Password:</source>
+<target>Parola:</target>
+
+<source>Key password:</source>
+<target>Anahtar Parolası:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1546,6 +1672,9 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>&Show</source>
<target>&Görüntülensin</target>
+<source>Downloading update...</source>
+<target>Güncelleme indiriliyor...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Dosyaların eşit olup olmadığı, son değişiklik zamanı ve boyuta göre belirlenir.</target>
@@ -1639,12 +1768,33 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Percentage</source>
<target>Yüzde</target>
+<source>Failed to retrieve update information.</source>
+<target>Güncelleme bilgileri alınamadı.</target>
+
+<source>Automatic updates:</source>
+<target>Otomatik güncellemeler:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition gereklidir</target>
+
<source>Check for Program Updates</source>
<target>Güncelleme Denetimi</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Şimdi otomatik olarak güncelle ya da FreeFileSync ana sayfasından indir</target>
+
+<source>&Auto-update</source>
+<target>&Otomatik Güncelle</target>
+
+<source>&Home page</source>
+<target>&Ana Sayfadan İndir</target>
+
<source>Download now?</source>
<target>İndirmek ister misiniz?</target>
+<source>&Download</source>
+<target>İn&dirin</target>
+
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync güncel.</target>
@@ -1657,14 +1807,20 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Consistency check failed for %x.</source>
<target>%x tutarlılık sınamasından geçemedi.</target>
-<source>Cannot find system function %x.</source>
-<target>%x sistem işlevi bulunamadı.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Kurulum başka bir işletim sistemi üzerinde kayıt edilmiş.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>FreeFileSync Donation Edition etkinleştirilemedi.</target>
+
+<source>Incorrect activation key.</source>
+<target>Etkinleştirme anahtarı hatalı.</target>
<source>Unable to register to receive system messages.</source>
<target>Sistem iletilerini alabilmek için gerekli kayıt eklenemedi.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Yükleme dosyaları bozulmuş. Lütfen FreeFileSync uygulamasını yeniden yükleyin.</target>
+<source>Cannot find system function %x.</source>
+<target>%x sistem işlevi bulunamadı.</target>
<source>Unable to register device notifications for %x.</source>
<target>%x aygıtının bildirimleri için gerekli kayıt eklenemedi.</target>
@@ -1696,9 +1852,6 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Cannot copy attributes from %x to %y.</source>
<target>Öznitelikler %x üzerinden %y üzerine kopyalanamadı.</target>
-<source>Type of item %x is not supported:</source>
-<target>%x ögesi tipi desteklenmiyor:</target>
-
<source>%x TB</source>
<target>%x TB</target>
@@ -1750,17 +1903,14 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>%x ayar dosyası tam değil. Eksik bileşenler için varsayılan değerler kullanılacak.</target>
-<source>Internet access failed.</source>
-<target>İnternet erişimi sağlanamadı.</target>
-
<source>Prepare installation</source>
-<target>Yüklemeye hazırlanılıyor</target>
+<target>Kuruluma hazırlanıyor</target>
<source>Choose which components you want to install.</source>
-<target>Yüklemek istediğiniz bileşenleri seçin.</target>
+<target>Kurmak istediğiniz bileşenleri seçin.</target>
<source>Select installation type:</source>
-<target>Yükleme tipini seçin:</target>
+<target>Kurulum türünü seçin:</target>
<source>Local</source>
<target>Yerel</target>
@@ -1781,7 +1931,7 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<target>Windows Gezgini Sağ Tık Menü Kayıtları Eklensin</target>
<source>Save settings in installation directory</source>
-<target>Ayarlar Yükleme Klasörüne Kaydedilsin</target>
+<target>Ayarlar Kurulum Klasörüne Kaydedilsin</target>
<source>Do not write to Registry</source>
<target>Kayıt Defterine Yazılmasın</target>
@@ -1790,7 +1940,7 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<target>Yalnız Dosyalar Kopyalansın</target>
<source>Choose a directory for installation:</source>
-<target>Yüklenecek Klasörü Seçin:</target>
+<target>Kurulum Klasörünü Seçin:</target>
<source>Create shortcuts:</source>
<target>Kısayollar Oluşturulsun:</target>
@@ -1822,18 +1972,12 @@ Bu yöntem, ciddi bir hata oluşması durumunda bile işlemin tutarlı olarak ya
<source>Edit with FreeFileSync</source>
<target>FreeFileSync ile Düzenlensin</target>
-<source>Thanks for your donation and support!</source>
-<target>Bağış ve destekleriniz için teşekkürler!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Bağışçılar için hazırlanmış bu FreeFileSync yükleyicisinin günlük yükleme sınırına ulaşıldı.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Web sitemizden normal FreeFileSync sürümünü indirmek ister misiniz?</target>
-
<source>The portable version cannot install into the selected folder.</source>
-<target>Taşınabilir sürüm seçilmiş klasöre yüklenemez.</target>
+<target>Taşınabilir sürüm seçilmiş klasöre kurulamaz.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
-<target>Yükleyebilmek için farklı bir klasör ya da yerel kurulum yöntemini seçin.</target>
+<target>Kurulum için farklı bir klasör ya da yerel kurulum türünü seçin.</target>
+
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Sessiz kurulum kipi yalnız FreeFileSync Donation Edition sürümünde bulunur.</target>
diff --git a/FreeFileSync/Build/Languages/ukrainian.lng b/FreeFileSync/Build/Languages/ukrainian.lng
index 2442ef9c..ba2434d7 100755
--- a/FreeFileSync/Build/Languages/ukrainian.lng
+++ b/FreeFileSync/Build/Languages/ukrainian.lng
@@ -22,12 +22,12 @@
<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
<target>Налаштування напрямку синхронізації за замовчуванням: Старі файли будуть замінені новішими файлами.</target>
-<source>Creating folder %x</source>
-<target>Створення папки %x</target>
-
<source>Creating file %x</source>
<target>Створення файлу %x</target>
+<source>Creating folder %x</source>
+<target>Створення папки %x</target>
+
<source>Creating symbolic link %x</source>
<target>Створення символьного посилання %x</target>
@@ -115,29 +115,20 @@
<source>If this error is ignored the folders will be considered empty. Missing folders are created automatically when needed.</source>
<target>Якщо цю помилку буде проігноровано папки будуть вважатися порожніми. Відсутні папки створюються автоматично, коли це необхідно.</target>
-<source>A folder input field is empty.</source>
-<target>Порожнє поле папки.</target>
-
-<source>The corresponding folder will be considered as empty.</source>
-<target>Відповідна папка буде вважатися порожньою.</target>
-
-<source>The following folder paths are dependent from each other:</source>
-<target>Наступні шляхи папок залежать один від одного:</target>
-
<source>File %x has an invalid date.</source>
<target>Файл %x має неіснуючу дату.</target>
<source>Date:</source>
<target>Дата:</target>
-<source>Files %x have the same date but a different size.</source>
-<target>Файли %x мають однакову дату, але різні за розміром.</target>
+<source>Files have the same date but a different size.</source>
+<target>Файли мають одинакову дату, але різний розмір.</target>
<source>Size:</source>
<target>Розмір:</target>
-<source>Content comparison was skipped for excluded files %x.</source>
-<target>Порівняння вмісту виключених файлів %x було пропущене.</target>
+<source>Content comparison was skipped for excluded files.</source>
+<target>Порівняння вмісту було пропущене для виключених файлів.</target>
<source>Items differ in attributes only</source>
<target>Елементи відрізняються тільки атрибутами</target>
@@ -187,6 +178,21 @@
<source>Starting comparison</source>
<target>Запустити порівняння</target>
+<source>A folder input field is empty.</source>
+<target>Порожнє поле папки.</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>Відповідна папка буде вважатися порожньою.</target>
+
+<source>Exclude:</source>
+<target>Виключити:</target>
+
+<source>One base folder of a folder pair is contained in the other one.</source>
+<target>Одна основна папка з пари папок міститься всередині іншої.</target>
+
+<source>The folder should be excluded from synchronization via filter.</source>
+<target>Папку потрібно виключити з синхронізації за допомогою фільтрів.</target>
+
<source>Calculating sync directions...</source>
<target>Встановлення напрямку синхронізації...</target>
@@ -247,12 +253,6 @@
<source>Update attributes on right</source>
<target>Оновити атрибути праворуч</target>
-<source>Cannot write permissions of %x.</source>
-<target>Не вдається записати права доступу до %x.</target>
-
-<source>Operation not supported for different base folder types.</source>
-<target>Операція не підтримується для різних типів базових папок.</target>
-
<source>Cannot write file %x.</source>
<target>Не вдається записати файл %x.</target>
@@ -267,39 +267,45 @@ Actual: %y bytes
Дійсний: %y байт
</target>
+<source>Cannot write permissions of %x.</source>
+<target>Не вдається записати права доступу до %x.</target>
+
+<source>Operation not supported for different base folder types.</source>
+<target>Операція не підтримується для різних типів базових папок.</target>
+
<source>Cannot copy symbolic link %x to %y.</source>
<target>Не вдається скопіювати символьне посилання %x до %y.</target>
<source>Cannot move file %x to %y.</source>
<target>Не вдається перемістити файл %x до %y.</target>
-<source>Cannot enumerate directory %x.</source>
-<target>Не вдається прочитати вміст папки %x.</target>
+<source>Unable to connect to %x.</source>
+<target>Не вдається з'єднатися з %x.</target>
-<source>Cannot read file attributes of %x.</source>
-<target>Не вдається прочитати атрибути файлу %x.</target>
+<source>Failed to get information about server %x.</source>
+<target>Не вдається отримати інформацію про сервер %x.</target>
-<source>Cannot find %x.</source>
-<target>Не вдається знайти %x.</target>
+<source>Cannot open directory %x.</source>
+<target>Не вдається відкрити папку %x.</target>
-<source>Cannot open file %x.</source>
-<target>Не вдається відкрити файл %x.</target>
+<source>Cannot read directory %x.</source>
+<target>Не вдається прочитати папку %x.</target>
<source>Cannot read file %x.</source>
<target>Не вдається прочитати файл %x.</target>
-<source>Cannot find device %x.</source>
-<target>Не вдається знайти пристрій %x.</target>
+<source>Cannot read file attributes of %x.</source>
+<target>Не вдається прочитати атрибути файлу %x.</target>
<source>Cannot create directory %x.</source>
<target>Не вдається створити папку %x.</target>
-<source>Cannot delete directory %x.</source>
-<target>Не вдається видалити папку %x.</target>
-
<source>Cannot delete file %x.</source>
<target>Не вдається видалити файл %x.</target>
+<source>Cannot delete directory %x.</source>
+<target>Не вдається видалити папку %x.</target>
+
<source>Cannot write modification time of %x.</source>
<target>Не вдається записати час модифікації %x.</target>
@@ -309,23 +315,67 @@ Actual: %y bytes
<source>Cannot resolve symbolic link %x.</source>
<target>Не вдається вирішити символьне посилання %x.</target>
-<source>Cannot open directory %x.</source>
-<target>Не вдається відкрити папку %x.</target>
+<source>Unable to move %x to the recycle bin.</source>
+<target>Не вдається перемістити %x до Корзини.</target>
+
+<source>Cannot open file %x.</source>
+<target>Не вдається відкрити файл %x.</target>
+
+<source>Cannot find device %x.</source>
+<target>Не вдається знайти пристрій %x.</target>
+
+<source>Cannot find %x.</source>
+<target>Не вдається знайти %x.</target>
+
+<source>Type of item %x is not supported:</source>
+<target>Тип елемента %x не підтримується:</target>
+
+<source>Cannot delete symbolic link %x.</source>
+<target>Не вдалося вилучити символьне посилання %x.</target>
<source>Cannot determine free disk space for %x.</source>
<target>Не вдається визначити об'єм вільного місця для %x.</target>
-<source>Unable to move %x to the recycle bin.</source>
-<target>Не вдається перемістити %x до Корзини.</target>
-
<source>Incorrect command line:</source>
<target>Неправильний командний рядок:</target>
-<source>Error Code %x:</source>
-<target>Код помилки %x:</target>
+<source>Error Code %x</source>
+<target>Код помилки %x</target>
-<source>Unable to connect to %x.</source>
-<target>Не вдається з'єднатися з %x.</target>
+<source>The server does not support authentication via %x.</source>
+<target>Сервер не підтримує аутентифікацію за допомогою %x.</target>
+
+<source>Required:</source>
+<target>Потрібно:</target>
+
+<source>Unable to access %x.</source>
+<target>Не вдалося отримати доступ до %x.</target>
+
+<source>
+<pluralform>Operation timed out after 1 second.</pluralform>
+<pluralform>Operation timed out after %x seconds.</pluralform>
+</source>
+<target>
+<pluralform>Вичерпався час очікування операції після %x секунди.</pluralform>
+<pluralform>Вичерпався час очікування операції після %x секунд.</pluralform>
+<pluralform>Вичерпався час очікування операції після %x секунд.</pluralform>
+</target>
+
+<source>
+<pluralform>Cannot wait on more than 1 connection at a time.</pluralform>
+<pluralform>Cannot wait on more than %x connections at a time.</pluralform>
+</source>
+<target>
+<pluralform>Неможливо очікувати більше ніж на %x з'єднанні одночасно.</pluralform>
+<pluralform>Неможливо очікувати більше ніж на %x з'єднання одночасно.</pluralform>
+<pluralform>Неможливо очікувати більше ніж на %x з'єднань одночасно.</pluralform>
+</target>
+
+<source>Active connections: %x</source>
+<target>Активні з'єднання: %x</target>
+
+<source>Failed to open SFTP channel number %x.</source>
+<target>Не вдалося відкрити SFTP канал номер %x.</target>
<source>
<pluralform>1 byte</pluralform>
@@ -358,11 +408,17 @@ Actual: %y bytes
<source>Database file %x does not yet exist.</source>
<target>Файл бази даних %x ще не існує.</target>
-<source>Database file is corrupt:</source>
+<source>Database file is corrupted:</source>
<target>Файл бази даних пошкоджений:</target>
-<source>Database files do not share a common session.</source>
-<target>Файли баз даних не мають спільної сесії.</target>
+<source>The database files do not yet contain information about the last synchronization.</source>
+<target>Файли бази даних не містять інформації про останню синхронізацію.</target>
+
+<source>Loading file %x...</source>
+<target>Завантажується файл %x...</target>
+
+<source>Saving file %x...</source>
+<target>Збереження файлу %x...</target>
<source>Searching for folder %x...</source>
<target>Пошук папки %x...</target>
@@ -392,9 +448,6 @@ Actual: %y bytes
<source>Detecting abandoned lock...</source>
<target>Виявлено покинуте блокування...</target>
-<source>Saving file %x...</source>
-<target>Збереження файлу %x...</target>
-
<source>Items processed:</source>
<target>Елементів оброблено:</target>
@@ -650,14 +703,23 @@ The command is triggered if:
<source>Not enough free disk space available in:</source>
<target>Не достатньо вільного місця на:</target>
-<source>Required:</source>
-<target>Потрібно:</target>
-
<source>Available:</source>
<target>Доступно:</target>
-<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
-<target>Декілька пар папок пишуть до спільної підпапки. Будь ласка, перевірте конфігурацію.</target>
+<source>Some files will be synchronized as part of multiple base folders.</source>
+<target>Деякі файли були синхронізовані як частина декількох основних папок.</target>
+
+<source>To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.</source>
+<target>Для уникнення конфліктів, встановлюйте фільтри для виключення так щоб кожен оновлений файл розглядався тільки однією основною папкою.</target>
+
+<source>Versioning folder:</source>
+<target>Папка з версіями:</target>
+
+<source>Base folder:</source>
+<target>Основна папка:</target>
+
+<source>The versioning folder will be synchronized because it is contained in a base folder.</source>
+<target>Папка з версіями буде синхронізована, тому що вона міститься в основній папці.</target>
<source>Synchronizing folder pair:</source>
<target>Синхронізація пари папок:</target>
@@ -665,6 +727,9 @@ The command is triggered if:
<source>Generating database...</source>
<target>Створення бази даних...</target>
+<source>Loading...</source>
+<target>Завантаження...</target>
+
<source>job name</source>
<target>назва завдання</target>
@@ -789,15 +854,6 @@ The command is triggered if:
<source>Please select a folder on a local file system, network or an MTP device.</source>
<target>Будь ласка, виберіть папку на локальній файловій системі, в мережі чи на MTP пристрої.</target>
-<source>SFTP folder</source>
-<target>SFTP папка</target>
-
-<source>Select SFTP folder</source>
-<target>Вибрати SFTP папку</target>
-
-<source>Select alternative folder type</source>
-<target>Виберіть альтернативний тип папки</target>
-
<source>&New</source>
<target>&Створити</target>
@@ -843,11 +899,8 @@ The command is triggered if:
<source>&Tools</source>
<target>&Інструменти</target>
-<source>&Check for new version</source>
-<target>&Перевірка наявності нової версії</target>
-
-<source>&Check now</source>
-<target>&Перевірити тепер</target>
+<source>&Check for updates now</source>
+<target>&Перевірити оновлення зараз</target>
<source>Check &automatically once a week</source>
<target>Перевіряти &автоматично щотижня</target>
@@ -867,6 +920,9 @@ The command is triggered if:
<source>Remove folder pair</source>
<target>Вилучити пару папок</target>
+<source>Access online storage</source>
+<target>Доступ до online сховища</target>
+
<source>Swap sides</source>
<target>Поміняти місцями</target>
@@ -954,9 +1010,6 @@ The command is triggered if:
<source>Include:</source>
<target>Включити:</target>
-<source>Exclude:</source>
-<target>Виключити:</target>
-
<source>Show examples</source>
<target>Показати приклади</target>
@@ -1040,8 +1093,11 @@ The command is triggered if:
<source>Arrange folder pair</source>
<target>Упорядкувати пару папок</target>
-<source>Enter your SFTP login details:</source>
-<target>Введіть дані для входу SFTP:</target>
+<source>Enter your login details:</source>
+<target>Введіть Ваші параметри входу:</target>
+
+<source>Connection type:</source>
+<target>Тип з'єднання:</target>
<source>Server name or IP address:</source>
<target>Ім'я серверу чи IP адреса:</target>
@@ -1049,11 +1105,29 @@ The command is triggered if:
<source>Port:</source>
<target>Порт:</target>
+<source>Encryption:</source>
+<target>Шифрування:</target>
+
+<source>&Disabled</source>
+<target>&Вимкнено</target>
+
+<source>&Explicit SSL/TLS</source>
+<target>&Явний SSL/TLS</target>
+
+<source>Authentication:</source>
+<target>Аутентифікація:</target>
+
+<source>&Password</source>
+<target>&Пароль</target>
+
+<source>&Key file</source>
+<target>&Файл ключа</target>
+
<source>User name:</source>
<target>Ім'я користувача:</target>
-<source>Password:</source>
-<target>Пароль:</target>
+<source>Private key file:</source>
+<target>Приватний файл ключа:</target>
<source>&Show password</source>
<target>&Показати пароль</target>
@@ -1061,6 +1135,27 @@ The command is triggered if:
<source>Directory on server:</source>
<target>Папка на сервері:</target>
+<source>Performance improvements:</source>
+<target>Підвищення продуктивності:</target>
+
+<source>How to get best performance?</source>
+<target>Як отримати найкращу швидкодію?</target>
+
+<source>SSH connections for directory reading:</source>
+<target>SSH з'єднання для читання папок:</target>
+
+<source>Suggested range: [1 - 10]</source>
+<target>Рекомендований діапазон: [1 - 10]</target>
+
+<source>SFTP channels per connection:</source>
+<target>SFTP канали на з'єднання:</target>
+
+<source>Detect server limit</source>
+<target>Визначити ліміти сервера</target>
+
+<source>2 connections x 10 channels = 20 times faster directory reading</source>
+<target>2 з'єднання x 10 каналів = у 20 раз швидше читання папок</target>
+
<source>Select a directory on the server:</source>
<target>Вибрати папку на сервері:</target>
@@ -1190,6 +1285,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Source code written in C++ using:</source>
<target>Код програми написаний на C++ з використанням:</target>
+<source>Donation details</source>
+<target>Докладно про пожертвування</target>
+
<source>If you like FreeFileSync:</source>
<target>Якщо Вам сподобався FreeFileSync:</target>
@@ -1199,7 +1297,7 @@ This guarantees a consistent state even in case of a serious error.
<source>Feedback and suggestions are welcome</source>
<target>Відгуки та пропозиції вітаються</target>
-<source>Homepage</source>
+<source>Home page</source>
<target>Домашня сторінка</target>
<source>Email</source>
@@ -1211,8 +1309,26 @@ This guarantees a consistent state even in case of a serious error.
<source>Many thanks for localization:</source>
<target>Подяка за локалізацію:</target>
-<source>SSH File Transfer Protocol</source>
-<target>Протокол передачі файлів SSH</target>
+<source>Activate the FreeFileSync Donation Edition by one of the following methods:</source>
+<target>Активувати FreeFileSync Donation Edition за допомогою одного з наступних методів:</target>
+
+<source>1. Activate via internet now:</source>
+<target>1. Активувати через інтернет зараз:</target>
+
+<source>Activate online</source>
+<target>Активувати online</target>
+
+<source>2. Retrieve an offline activation key from the following URL:</source>
+<target>2. Отримати ключ для offline активації за допомогою наступного посилання:</target>
+
+<source>&Copy to clipboard</source>
+<target>&Копіювати в буфер обміну</target>
+
+<source>Enter activation key:</source>
+<target>Ввести ключ активації:</target>
+
+<source>Activate offline</source>
+<target>Активувати offline</target>
<source>Save as Batch Job</source>
<target>Зберегти як пакетне завдання</target>
@@ -1229,6 +1345,9 @@ This guarantees a consistent state even in case of a serious error.
<source>Select Time Span</source>
<target>Виберіть Інтервал Часу</target>
+<source>FreeFileSync Donation Edition</source>
+<target>FreeFileSync Donation Edition</target>
+
<source>&Options</source>
<target>&Опції</target>
@@ -1250,8 +1369,8 @@ This guarantees a consistent state even in case of a serious error.
<source>Overview</source>
<target>Огляд</target>
-<source>&Download</source>
-<target>&Завантажити</target>
+<source>&Show details</source>
+<target>&Показати докладніше</target>
<source>A new version of FreeFileSync is available:</source>
<target>Доступна нова версія FreeFileSync:</target>
@@ -1494,8 +1613,17 @@ This guarantees a consistent state even in case of a serious error.
<source>Log</source>
<target>Лог</target>
-<source>Loading...</source>
-<target>Завантаження...</target>
+<source>Installation files are corrupted. Please reinstall FreeFileSync.</source>
+<target>Файли встановлення пошкоджені. Будь ласка, перевстановіть FreeFileSync.</target>
+
+<source>Thank you, %x, for your donation and support!</source>
+<target>Дякуємо Вам, %x, за ваше пожертвування та підтримку!</target>
+
+<source>Password:</source>
+<target>Пароль:</target>
+
+<source>Key password:</source>
+<target>Пароль ключа:</target>
<source>
<pluralform>Copy the following item to another folder?</pluralform>
@@ -1557,6 +1685,9 @@ This guarantees a consistent state even in case of a serious error.
<source>&Show</source>
<target>&Показати</target>
+<source>Downloading update...</source>
+<target>Завантажується оновлення...</target>
+
<source>Identify equal files by comparing modification time and size.</source>
<target>Визначити однакові файли порівнюючи час модифікації та розмір.</target>
@@ -1650,12 +1781,33 @@ This guarantees a consistent state even in case of a serious error.
<source>Percentage</source>
<target>Проценти</target>
+<source>Failed to retrieve update information.</source>
+<target>Не вдалося отримати інформацію про оновлення.</target>
+
+<source>Automatic updates:</source>
+<target>Автоматичні оновлення:</target>
+
+<source>Requires FreeFileSync Donation Edition</source>
+<target>Потрібна FreeFileSync Donation Edition</target>
+
<source>Check for Program Updates</source>
<target>Перевірка Оновлень Програми</target>
+<source>Auto-update now or download manually from the FreeFileSync home page?</source>
+<target>Автоматично оновити зараз чи завантажити вручную з домашньї сторінки FreeFileSync?</target>
+
+<source>&Auto-update</source>
+<target>&Автоматичне оновлення</target>
+
+<source>&Home page</source>
+<target>&Домашня сторінка</target>
+
<source>Download now?</source>
<target>Завантажити зараз?</target>
+<source>&Download</source>
+<target>&Завантажити</target>
+
<source>FreeFileSync is up to date.</source>
<target>У Вас найновіша версія FreeFileSync.</target>
@@ -1668,14 +1820,20 @@ This guarantees a consistent state even in case of a serious error.
<source>Consistency check failed for %x.</source>
<target>Перевірка цілісності неуспішна для %x.</target>
-<source>Cannot find system function %x.</source>
-<target>Не вдається знайти системну функцію %x.</target>
+<source>Installation was registered on a different operating system.</source>
+<target>Встановлення було зареєстровано на іншій операційній системі.</target>
+
+<source>Failed to activate FreeFileSync Donation Edition.</source>
+<target>Не вдалося активувати FreeFileSync Donation Edition.</target>
+
+<source>Incorrect activation key.</source>
+<target>Неправильний код активації.</target>
<source>Unable to register to receive system messages.</source>
<target>Не вдається зареєструватися для отримання системних повідомлень.</target>
-<source>Installation files are corrupt. Please reinstall FreeFileSync.</source>
-<target>Файли для встановлення пошкоджені. Будь ласка, перевстановіть FreeFileSync.</target>
+<source>Cannot find system function %x.</source>
+<target>Не вдається знайти системну функцію %x.</target>
<source>Unable to register device notifications for %x.</source>
<target>Не вдається зареєструвати повідомлення пристрою для %x.</target>
@@ -1707,9 +1865,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Cannot copy attributes from %x to %y.</source>
<target>Не вдається скопіювати атрибути з %x до %y.</target>
-<source>Type of item %x is not supported:</source>
-<target>Тип елемента %x не підтримується:</target>
-
<source>%x TB</source>
<target>%x ТБ</target>
@@ -1764,9 +1919,6 @@ This guarantees a consistent state even in case of a serious error.
<source>Configuration file %x is incomplete. The missing elements will be set to their default values.</source>
<target>Файл конфігурації %x неповний. Елементи, яких не вистачає, будуть заповнені значеннями за замовчуванням.</target>
-<source>Internet access failed.</source>
-<target>Немає доступу до Internet.</target>
-
<source>Prepare installation</source>
<target>Підготовка встановлення</target>
@@ -1836,18 +1988,12 @@ This guarantees a consistent state even in case of a serious error.
<source>Edit with FreeFileSync</source>
<target>Редагувати за допомогою FreeFileSync</target>
-<source>Thanks for your donation and support!</source>
-<target>Спасибі за пожертвування та підтримку!</target>
-
-<source>This FreeFileSync installer for donors has reached its daily installation limit.</source>
-<target>Цей FreeFileSync інсталятор для донорів досяг свого денного ліміту встановлень.</target>
-
-<source>Download the regular version from the FreeFileSync homepage now?</source>
-<target>Завантажити звичайну версію з домашньої сторінки FreeFileSync зараз?</target>
-
<source>The portable version cannot install into the selected folder.</source>
<target>Портативна версія не може бути встановлена у вибрану папку.</target>
<source>Please choose the local installation type or select a different folder for installation.</source>
<target>Будь ласка, виберіть локальний тип інсталяції чи іншу папку для встановлення.</target>
+<source>The silent installation mode is only available in the FreeFileSync Donation Edition.</source>
+<target>Режим автоматичного встановлення доступний тільки у FreeFileSync Donation Edition.</target>
+
diff --git a/FreeFileSync/Build/Resources.zip b/FreeFileSync/Build/Resources.zip
index 85b1967d..17d7f04d 100755
--- a/FreeFileSync/Build/Resources.zip
+++ b/FreeFileSync/Build/Resources.zip
Binary files differ
diff --git a/FreeFileSync/Source/algorithm.cpp b/FreeFileSync/Source/algorithm.cpp
index 45457e5b..8374c713 100755
--- a/FreeFileSync/Source/algorithm.cpp
+++ b/FreeFileSync/Source/algorithm.cpp
@@ -214,7 +214,7 @@ bool matchesDbEntry(const FilePair& file, const InSyncFolder::FileList::value_ty
return file.getItemName<side>() == shortNameDb && //detect changes in case (windows)
//respect 2 second FAT/FAT32 precision! copying a file to a FAT32 drive changes it's modification date by up to 2 seconds
//we're not interested in "fileTimeTolerance" here!
- sameFileTime(file.getLastWriteTime<side>(), descrDb.lastWriteTimeRaw, 2, ignoreTimeShiftMinutes) &&
+ sameFileTime(file.getLastWriteTime<side>(), descrDb.modTime, 2, ignoreTimeShiftMinutes) &&
file.getFileSize<side>() == dbFile->second.fileSize;
//note: we do *not* consider FileId here, but are only interested in *visual* changes. Consider user moving data to some other medium, this is not a change!
}
@@ -230,7 +230,7 @@ bool stillInSync(const InSyncFile& dbFile, CompareVariant compareVar, int fileTi
if (dbFile.cmpVar == CompareVariant::CONTENT) return true; //special rule: this is certainly "good enough" for CompareVariant::TIME_SIZE!
//case-sensitive short name match is a database invariant!
- return sameFileTime(dbFile.left.lastWriteTimeRaw, dbFile.right.lastWriteTimeRaw, fileTimeTolerance, ignoreTimeShiftMinutes);
+ return sameFileTime(dbFile.left.modTime, dbFile.right.modTime, fileTimeTolerance, ignoreTimeShiftMinutes);
case CompareVariant::CONTENT:
//case-sensitive short name match is a database invariant!
@@ -267,7 +267,7 @@ bool matchesDbEntry(const SymlinkPair& symlink, const InSyncFolder::SymlinkList:
return symlink.getItemName<side>() == shortNameDb &&
//respect 2 second FAT/FAT32 precision! copying a file to a FAT32 drive changes its modification date by up to 2 seconds
- sameFileTime(symlink.getLastWriteTime<side>(), descrDb.lastWriteTimeRaw, 2, ignoreTimeShiftMinutes);
+ sameFileTime(symlink.getLastWriteTime<side>(), descrDb.modTime, 2, ignoreTimeShiftMinutes);
}
@@ -282,7 +282,7 @@ bool stillInSync(const InSyncSymlink& dbLink, CompareVariant compareVar, int fil
return true; //special rule: this is already "good enough" for CompareVariant::TIME_SIZE!
//case-sensitive short name match is a database invariant!
- return sameFileTime(dbLink.left.lastWriteTimeRaw, dbLink.right.lastWriteTimeRaw, fileTimeTolerance, ignoreTimeShiftMinutes);
+ return sameFileTime(dbLink.left.modTime, dbLink.right.modTime, fileTimeTolerance, ignoreTimeShiftMinutes);
case CompareVariant::CONTENT:
case CompareVariant::SIZE: //== categorized by content! see comparison.cpp, ComparisonBuffer::compareBySize()
@@ -406,7 +406,7 @@ private:
static bool sameSizeAndDate(const FilePair& file, const InSyncFile& dbFile)
{
return file.getFileSize<side>() == dbFile.fileSize &&
- sameFileTime(file.getLastWriteTime<side>(), getDescriptor<side>(dbFile).lastWriteTimeRaw, 2, {});
+ sameFileTime(file.getLastWriteTime<side>(), getDescriptor<side>(dbFile).modTime, 2, {});
//- respect 2 second FAT/FAT32 precision! not user-configurable!
//- "ignoreTimeShiftMinutes" may lead to false positive move detections => let's be conservative and not allow it
// (time shift is only ever required during FAT DST switches)
@@ -1285,12 +1285,15 @@ void copyToAlternateFolderFrom(const std::vector<const FileSystemObject*>& rowsT
StatisticsReporter statReporter(1, file.getFileSize<side>(), callback);
notifyItemCopy(txtCreatingFile, AFS::getDisplayPath(targetPath));
+ const FileAttributes attr = file.getAttributes<side>();
+ const AFS::StreamAttributes sourceAttr{ attr.modTime, attr.fileSize, attr.fileId };
+
copyItem(targetPath, [&](const std::function<void()>& deleteTargetItem) //throw FileError
{
auto notifyUnbufferedIO = [&](int64_t bytesDelta) { statReporter.reportDelta(0, bytesDelta); };
-
- AFS::copyFileTransactional(sourcePath, targetPath, //throw FileError, ErrorFileLocked
- false /*copyFilePermissions*/, true /*transactionalCopy*/, deleteTargetItem, notifyUnbufferedIO);
+ const AFS::FileCopyResult result = AFS::copyFileTransactional(sourcePath, sourceAttr, targetPath, //throw FileError, ErrorFileLocked
+ false /*copyFilePermissions*/, true /*transactionalCopy*/, deleteTargetItem, notifyUnbufferedIO);
+ //result.errorModTime? => probably irrelevant (behave like Windows Explorer)
});
statReporter.reportDelta(1, 0);
},
@@ -1317,6 +1320,7 @@ void zen::copyToAlternateFolder(const std::vector<const FileSystemObject*>& rows
const Zstring& targetFolderPathPhrase,
bool keepRelPaths,
bool overwriteIfExists,
+ xmlAccess::OptionalDialogs& warnings,
ProcessCallback& callback)
{
std::vector<const FileSystemObject*> itemSelectionLeft = rowsToCopyOnLeft;
@@ -1385,7 +1389,7 @@ void deleteFromGridAndHDOneSide(std::vector<FileSystemObject*>& rowsToDelete,
if (!fsObj->isEmpty<side>()) //element may be implicitly deleted, e.g. if parent folder was deleted first
{
visitFSObject(*fsObj,
- [&](const FolderPair& folder)
+ [&](const FolderPair& folder)
{
if (useRecycleBin)
{
@@ -1575,19 +1579,19 @@ void zen::deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDelete
//############################################################################################################
-bool zen::operator<(const TempFileBuffer::FileDetails& lhs, const TempFileBuffer::FileDetails& rhs)
+bool zen::operator<(const FileDescriptor& lhs, const FileDescriptor& rhs)
{
- if (lhs.descr.lastWriteTimeRaw != rhs.descr.lastWriteTimeRaw)
- return lhs.descr.lastWriteTimeRaw < rhs.descr.lastWriteTimeRaw;
+ if (lhs.attr.modTime != rhs.attr.modTime)
+ return lhs.attr.modTime < rhs.attr.modTime;
- if (lhs.descr.fileSize != rhs.descr.fileSize)
- return lhs.descr.fileSize < rhs.descr.fileSize;
+ if (lhs.attr.fileSize != rhs.attr.fileSize)
+ return lhs.attr.fileSize < rhs.attr.fileSize;
- if (lhs.descr.fileId != rhs.descr.fileId)
- return lhs.descr.fileId < rhs.descr.fileId;
+ if (lhs.attr.fileId != rhs.attr.fileId)
+ return lhs.attr.fileId < rhs.attr.fileId;
- if (lhs.descr.isFollowedSymlink != rhs.descr.isFollowedSymlink)
- return lhs.descr.isFollowedSymlink < rhs.descr.isFollowedSymlink;
+ if (lhs.attr.isFollowedSymlink != rhs.attr.isFollowedSymlink)
+ return lhs.attr.isFollowedSymlink < rhs.attr.isFollowedSymlink;
return AFS::LessAbstractPath()(lhs.path, rhs.path);
}
@@ -1605,22 +1609,22 @@ TempFileBuffer::~TempFileBuffer()
//returns empty if not available (item not existing, error during copy)
-Zstring TempFileBuffer::getTempPath(const FileDetails& details) const
+Zstring TempFileBuffer::getTempPath(const FileDescriptor& descr) const
{
- auto it = tempFilePaths_.find(details);
+ auto it = tempFilePaths_.find(descr);
if (it != tempFilePaths_.end())
return it->second;
return Zstring();
}
-void TempFileBuffer::createTempFiles(const std::set<FileDetails>& workLoad, ProcessCallback& callback)
+void TempFileBuffer::createTempFiles(const std::set<FileDescriptor>& workLoad, ProcessCallback& callback)
{
const int itemTotal = static_cast<int>(workLoad.size());
int64_t bytesTotal = 0;
- for (const FileDetails& details : workLoad)
- bytesTotal += details.descr.fileSize;
+ for (const FileDescriptor& descr : workLoad)
+ bytesTotal += descr.attr.fileSize;
callback.initNewPhase(itemTotal, bytesTotal, ProcessCallback::PHASE_SYNCHRONIZING); //throw X
@@ -1645,40 +1649,44 @@ void TempFileBuffer::createTempFiles(const std::set<FileDetails>& workLoad, Proc
if (errMsg) return;
}
- for (const FileDetails& details : workLoad)
+ for (const FileDescriptor& descr : workLoad)
{
- assert(tempFilePaths_.find(details) == tempFilePaths_.end()); //ensure correct stats, NO overwrite-copy => caller-contract!
+ assert(tempFilePaths_.find(descr) == tempFilePaths_.end()); //ensure correct stats, NO overwrite-copy => caller-contract!
MemoryStreamOut<std::string> cookie; //create hash to distinguish different versions and file locations
- writeNumber (cookie, details.descr.lastWriteTimeRaw);
- writeNumber (cookie, details.descr.fileSize);
- writeContainer(cookie, details.descr.fileId);
- writeNumber (cookie, details.descr.isFollowedSymlink);
- writeContainer(cookie, AFS::getInitPathPhrase(details.path));
+ writeNumber (cookie, descr.attr.modTime);
+ writeNumber (cookie, descr.attr.fileSize);
+ writeContainer(cookie, descr.attr.fileId);
+ writeNumber (cookie, descr.attr.isFollowedSymlink);
+ writeContainer(cookie, AFS::getInitPathPhrase(descr.path));
const uint16_t crc16 = getCrc16(cookie.ref());
- const Zstring detailsHash = printNumber<Zstring>(Zstr("%04x"), static_cast<unsigned int>(crc16));
+ const Zstring descrHash = printNumber<Zstring>(Zstr("%04x"), static_cast<unsigned int>(crc16));
- const Zstring fileName = AFS::getItemName(details.path);
+ const Zstring fileName = AFS::getItemName(descr.path);
auto it = std::find(fileName.begin(), fileName.end(), Zchar('.')); //gracefully handle case of missing "."
- const Zstring tempFileName = Zstring(fileName.begin(), it) + Zchar('-') + detailsHash + Zstring(it, fileName.end());
+ const Zstring tempFileName = Zstring(fileName.begin(), it) + Zchar('-') + descrHash + Zstring(it, fileName.end());
const Zstring tempFilePath = appendSeparator(tempFolderPath_) + tempFileName;
+ const AFS::StreamAttributes sourceAttr{ descr.attr.modTime, descr.attr.fileSize, descr.attr.fileId };
tryReportingError([&]
{
- StatisticsReporter statReporter(1, details.descr.fileSize, callback);
+ StatisticsReporter statReporter(1, descr.attr.fileSize, callback);
callback.reportInfo(replaceCpy(_("Creating file %x"), L"%x", fmtPath(tempFilePath)));
auto notifyUnbufferedIO = [&](int64_t bytesDelta) { statReporter.reportDelta(0, bytesDelta); };
- AFS::copyFileTransactional(details.path, createItemPathNative(tempFilePath), //throw FileError, ErrorFileLocked
+ AFS::copyFileTransactional(descr.path, sourceAttr, //throw FileError, ErrorFileLocked
+ createItemPathNative(tempFilePath),
false /*copyFilePermissions*/, true /*transactionalCopy*/, nullptr /*onDeleteTargetFile*/, notifyUnbufferedIO);
+ //result.errorModTime? => irrelevant for temp files!
+
statReporter.reportDelta(1, 0);
- tempFilePaths_[details] = tempFilePath;
+ tempFilePaths_[descr] = tempFilePath;
}, callback); //throw X?
}
}
diff --git a/FreeFileSync/Source/algorithm.h b/FreeFileSync/Source/algorithm.h
index 16a92364..ea930ce7 100755
--- a/FreeFileSync/Source/algorithm.h
+++ b/FreeFileSync/Source/algorithm.h
@@ -10,6 +10,7 @@
#include <functional>
#include "file_hierarchy.h"
#include "lib/soft_filter.h"
+#include "lib/process_xml.h"
#include "process_callback.h"
@@ -62,6 +63,7 @@ void copyToAlternateFolder(const std::vector<const FileSystemObject*>& rowsToCop
const Zstring& targetFolderPathPhrase,
bool keepRelPaths,
bool overwriteIfExists,
+ xmlAccess::OptionalDialogs& warnings,
ProcessCallback& callback);
//manual deletion of files on main grid
@@ -74,6 +76,13 @@ void deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDeleteOnLef
bool& warnRecyclerMissing,
ProcessCallback& callback);
+struct FileDescriptor
+{
+ AbstractPath path;
+ FileAttributes attr;
+};
+bool operator<(const FileDescriptor& lhs, const FileDescriptor& rhs);
+
//get native Win32 paths or create temporary copy for SFTP/MTP, ect.
class TempFileBuffer
{
@@ -81,23 +90,17 @@ public:
TempFileBuffer() {}
~TempFileBuffer();
- struct FileDetails
- {
- AbstractPath path;
- FileDescriptor descr;
- };
- Zstring getTempPath(const FileDetails& details) const; //returns empty if not in buffer (item not existing, error during copy)
+ Zstring getTempPath(const FileDescriptor& descr) const; //returns empty if not in buffer (item not existing, error during copy)
//contract: only add files not yet in the buffer!
- void createTempFiles(const std::set<FileDetails>& workLoad, ProcessCallback& callback);
+ void createTempFiles(const std::set<FileDescriptor>& workLoad, ProcessCallback& callback);
private:
TempFileBuffer (const TempFileBuffer&) = delete;
TempFileBuffer& operator=(const TempFileBuffer&) = delete;
- std::map<FileDetails, Zstring> tempFilePaths_;
+ std::map<FileDescriptor, Zstring> tempFilePaths_;
Zstring tempFolderPath_;
};
-bool operator<(const TempFileBuffer::FileDetails& lhs, const TempFileBuffer::FileDetails& rhs);
}
#endif //ALGORITHM_H_34218518475321452548
diff --git a/FreeFileSync/Source/application.cpp b/FreeFileSync/Source/application.cpp
index 29d2c63b..e4d0ac1a 100755
--- a/FreeFileSync/Source/application.cpp
+++ b/FreeFileSync/Source/application.cpp
@@ -523,7 +523,6 @@ void runBatchMode(const Zstring& globalConfigFilePath, const XmlBatchConfig& bat
throw std::logic_error("Contract violation! " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
synchronize(timeStamp,
- globalCfg.optDialogs,
globalCfg.verifyFileCopy,
globalCfg.copyLockedFiles,
globalCfg.copyFilePermissions,
@@ -532,6 +531,7 @@ void runBatchMode(const Zstring& globalConfigFilePath, const XmlBatchConfig& bat
globalCfg.folderAccessTimeout,
syncProcessCfg,
cmpResult,
+ globalCfg.optDialogs,
statusHandler); //throw ?
}
catch (BatchAbortProcess&) {} //exit used by statusHandler
diff --git a/FreeFileSync/Source/comparison.cpp b/FreeFileSync/Source/comparison.cpp
index 3a69535c..f4e94d8a 100755
--- a/FreeFileSync/Source/comparison.cpp
+++ b/FreeFileSync/Source/comparison.cpp
@@ -29,13 +29,13 @@ std::vector<FolderPairCfg> zen::extractCompareCfg(const MainConfiguration& mainC
[&](const FolderPairEnh& enhPair) -> FolderPairCfg
{
return FolderPairCfg(enhPair.folderPathPhraseLeft_, enhPair.folderPathPhraseRight_,
- enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->compareVar : mainCfg.cmpConfig.compareVar,
- enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->handleSymlinks : mainCfg.cmpConfig.handleSymlinks,
- enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->ignoreTimeShiftMinutes : mainCfg.cmpConfig.ignoreTimeShiftMinutes,
+ enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->compareVar : mainCfg.cmpConfig.compareVar,
+ enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->handleSymlinks : mainCfg.cmpConfig.handleSymlinks,
+ enhPair.altCmpConfig.get() ? enhPair.altCmpConfig->ignoreTimeShiftMinutes : mainCfg.cmpConfig.ignoreTimeShiftMinutes,
- normalizeFilters(mainCfg.globalFilter, enhPair.localFilter),
+ normalizeFilters(mainCfg.globalFilter, enhPair.localFilter),
- enhPair.altSyncConfig.get() ? enhPair.altSyncConfig->directionCfg : mainCfg.syncCfg.directionCfg);
+ enhPair.altSyncConfig.get() ? enhPair.altSyncConfig->directionCfg : mainCfg.syncCfg.directionCfg);
});
return output;
}
@@ -899,7 +899,7 @@ FolderComparison zen::compare(xmlAccess::OptionalDialogs& warnings,
if (!msg.empty())
callback.reportWarning(_("One base folder of a folder pair is contained in the other one.") + L"\n" +
- _("You may want to exclude it from synchronization via filter.") + msg, warnings.warnDependentFolderPair);
+ _("The folder should be excluded from synchronization via filter.") + msg, warnings.warnDependentFolderPair);
}
//-------------------end of basic checks------------------------------------------
diff --git a/FreeFileSync/Source/file_hierarchy.cpp b/FreeFileSync/Source/file_hierarchy.cpp
index b9684b4e..19843669 100755
--- a/FreeFileSync/Source/file_hierarchy.cpp
+++ b/FreeFileSync/Source/file_hierarchy.cpp
@@ -172,10 +172,10 @@ SyncOperation FolderPair::getSyncOperation() const
//action for child elements may occassionally have to overwrite parent task:
switch (*syncOpBuffered_)
{
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
assert(false);
case SO_CREATE_NEW_LEFT:
case SO_CREATE_NEW_RIGHT:
@@ -198,7 +198,7 @@ SyncOperation FolderPair::getSyncOperation() const
{
const SyncOperation op = fsObj.getSyncOperation();
return op == SO_CREATE_NEW_LEFT ||
- op == SO_MOVE_LEFT_TARGET;
+ op == SO_MOVE_LEFT_TO;
}))
syncOpBuffered_ = SO_CREATE_NEW_LEFT;
//2. cancel parent deletion if only a single child is not also scheduled for deletion
@@ -210,7 +210,7 @@ SyncOperation FolderPair::getSyncOperation() const
return false; //fsObj may already be empty because it once contained a "move source"
const SyncOperation op = fsObj.getSyncOperation();
return op != SO_DELETE_RIGHT &&
- op != SO_MOVE_RIGHT_SOURCE;
+ op != SO_MOVE_RIGHT_FROM;
}))
syncOpBuffered_ = SO_DO_NOTHING;
}
@@ -221,7 +221,7 @@ SyncOperation FolderPair::getSyncOperation() const
{
const SyncOperation op = fsObj.getSyncOperation();
return op == SO_CREATE_NEW_RIGHT ||
- op == SO_MOVE_RIGHT_TARGET;
+ op == SO_MOVE_RIGHT_TO;
}))
syncOpBuffered_ = SO_CREATE_NEW_RIGHT;
else if (*syncOpBuffered_ == SO_DELETE_LEFT &&
@@ -232,7 +232,7 @@ SyncOperation FolderPair::getSyncOperation() const
return false;
const SyncOperation op = fsObj.getSyncOperation();
return op != SO_DELETE_LEFT &&
- op != SO_MOVE_LEFT_SOURCE;
+ op != SO_MOVE_LEFT_FROM;
}))
syncOpBuffered_ = SO_DO_NOTHING;
}
@@ -257,16 +257,16 @@ SyncOperation FilePair::applyMoveOptimization(SyncOperation op) const
if (op == SO_CREATE_NEW_LEFT &&
opRef == SO_DELETE_LEFT)
- op = SO_MOVE_LEFT_TARGET;
+ op = SO_MOVE_LEFT_TO;
else if (op == SO_DELETE_LEFT &&
opRef == SO_CREATE_NEW_LEFT)
- op = SO_MOVE_LEFT_SOURCE;
+ op = SO_MOVE_LEFT_FROM;
else if (op == SO_CREATE_NEW_RIGHT &&
opRef == SO_DELETE_RIGHT)
- op = SO_MOVE_RIGHT_TARGET;
+ op = SO_MOVE_RIGHT_TO;
else if (op == SO_DELETE_RIGHT &&
opRef == SO_CREATE_NEW_RIGHT)
- op = SO_MOVE_RIGHT_SOURCE;
+ op = SO_MOVE_RIGHT_FROM;
}
return op;
}
@@ -331,15 +331,15 @@ std::wstring zen::getCategoryDescription(const FileSystemObject& fsObj)
visitFSObject(fsObj, [](const FolderPair& folder) {},
[&](const FilePair& file)
{
- descr = descr + L"\n" +
- arrowLeft + L" " + zen::utcToLocalTimeString(file.getLastWriteTime< LEFT_SIDE>()) + L"\n" +
- arrowRight + L" " + zen::utcToLocalTimeString(file.getLastWriteTime<RIGHT_SIDE>());
+ descr += std::wstring(L"\n") +
+ arrowLeft + L" " + zen::utcToLocalTimeString(file.getLastWriteTime< LEFT_SIDE>()) + L"\n" +
+ arrowRight + L" " + zen::utcToLocalTimeString(file.getLastWriteTime<RIGHT_SIDE>());
},
[&](const SymlinkPair& symlink)
{
- descr = descr + L"\n" +
- arrowLeft + L" " + zen::utcToLocalTimeString(symlink.getLastWriteTime< LEFT_SIDE>()) + L"\n" +
- arrowRight + L" " + zen::utcToLocalTimeString(symlink.getLastWriteTime<RIGHT_SIDE>());
+ descr += std::wstring(L"\n") +
+ arrowLeft + L" " + zen::utcToLocalTimeString(symlink.getLastWriteTime< LEFT_SIDE>()) + L"\n" +
+ arrowRight + L" " + zen::utcToLocalTimeString(symlink.getLastWriteTime<RIGHT_SIDE>());
});
return descr + footer;
}
@@ -365,11 +365,11 @@ std::wstring zen::getSyncOpDescription(SyncOperation op)
return _("Delete left item");
case SO_DELETE_RIGHT:
return _("Delete right item");
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
return _("Move file on left"); //move only supported for files
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
return _("Move file on right");
case SO_OVERWRITE_LEFT:
return _("Update left item");
@@ -424,15 +424,15 @@ std::wstring zen::getSyncOpDescription(const FileSystemObject& fsObj)
}
return getSyncOpDescription(op) + footer; //fallback
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
if (auto sourceFile = dynamic_cast<const FilePair*>(&fsObj))
if (auto targetFile = dynamic_cast<const FilePair*>(FileSystemObject::retrieve(sourceFile->getMoveRef())))
{
- const bool onLeft = op == SO_MOVE_LEFT_SOURCE || op == SO_MOVE_LEFT_TARGET;
- const bool isSource = op == SO_MOVE_LEFT_SOURCE || op == SO_MOVE_RIGHT_SOURCE;
+ const bool onLeft = op == SO_MOVE_LEFT_FROM || op == SO_MOVE_LEFT_TO;
+ const bool isSource = op == SO_MOVE_LEFT_FROM || op == SO_MOVE_RIGHT_FROM;
if (!isSource)
std::swap(sourceFile, targetFile);
diff --git a/FreeFileSync/Source/file_hierarchy.h b/FreeFileSync/Source/file_hierarchy.h
index 2d9cba9f..057bdd5f 100755
--- a/FreeFileSync/Source/file_hierarchy.h
+++ b/FreeFileSync/Source/file_hierarchy.h
@@ -26,38 +26,38 @@ namespace zen
{
using AFS = AbstractFileSystem;
-struct FileDescriptor
+struct FileAttributes
{
- FileDescriptor() {}
- FileDescriptor(int64_t lastWriteTimeRawIn,
+ FileAttributes() {}
+ FileAttributes(int64_t modTimeIn,
uint64_t fileSizeIn,
const AFS::FileId& idIn,
bool isSymlink) :
- lastWriteTimeRaw(lastWriteTimeRawIn),
+ modTime(modTimeIn),
fileSize(fileSizeIn),
fileId(idIn),
isFollowedSymlink(isSymlink) {}
- int64_t lastWriteTimeRaw = 0; //number of seconds since Jan. 1st 1970 UTC, same semantics like time_t (== signed long)
+ int64_t modTime = 0; //number of seconds since Jan. 1st 1970 UTC, same semantics like time_t (== signed long)
uint64_t fileSize = 0;
- AFS::FileId fileId {}; // optional!
+ AFS::FileId fileId; //optional!
bool isFollowedSymlink = false;
};
-struct LinkDescriptor
+struct LinkAttributes
{
- LinkDescriptor() {}
- explicit LinkDescriptor(int64_t lastWriteTimeRawIn) : lastWriteTimeRaw(lastWriteTimeRawIn) {}
+ LinkAttributes() {}
+ explicit LinkAttributes(int64_t modTimeIn) : modTime(modTimeIn) {}
- int64_t lastWriteTimeRaw = 0; //number of seconds since Jan. 1st 1970 UTC, same semantics like time_t (== signed long)
+ int64_t modTime = 0; //number of seconds since Jan. 1st 1970 UTC, same semantics like time_t (== signed long)
};
-struct FolderDescriptor
+struct FolderAttributes
{
- FolderDescriptor() {}
- FolderDescriptor(bool isSymlink) :
+ FolderAttributes() {}
+ FolderAttributes(bool isSymlink) :
isFollowedSymlink(isSymlink) {}
bool isFollowedSymlink = false;
@@ -102,9 +102,9 @@ struct SelectParam<RIGHT_SIDE>
struct FolderContainer
{
//------------------------------------------------------------------
- using FolderList = std::map<Zstring, std::pair<FolderDescriptor, FolderContainer>, LessFilePath>; //
- using FileList = std::map<Zstring, FileDescriptor, LessFilePath>; //key: file name
- using SymlinkList = std::map<Zstring, LinkDescriptor, LessFilePath>; //
+ using FolderList = std::map<Zstring, std::pair<FolderAttributes, FolderContainer>, LessFilePath>; //
+ using FileList = std::map<Zstring, FileAttributes, LessFilePath>; //key: file name
+ using SymlinkList = std::map<Zstring, LinkAttributes, LessFilePath>; //
//------------------------------------------------------------------
FolderContainer() = default;
@@ -115,29 +115,29 @@ struct FolderContainer
SymlinkList symlinks; //non-followed symlinks
FolderList folders;
- void addSubFile(const Zstring& itemName, const FileDescriptor& descr)
+ void addSubFile(const Zstring& itemName, const FileAttributes& attr)
{
- auto rv = files.emplace(itemName, descr);
+ auto rv = files.emplace(itemName, attr);
if (!rv.second) //update entry if already existing (e.g. during folder traverser "retry") => does not handle different item name case (irrelvant!..)
- rv.first->second = descr;
+ rv.first->second = attr;
}
- void addSubLink(const Zstring& itemName, const LinkDescriptor& descr)
+ void addSubLink(const Zstring& itemName, const LinkAttributes& attr)
{
- auto rv = symlinks.emplace(itemName, descr);
+ auto rv = symlinks.emplace(itemName, attr);
if (!rv.second)
- rv.first->second = descr;
+ rv.first->second = attr;
}
- FolderContainer& addSubFolder(const Zstring& itemName, const FolderDescriptor& descr)
+ FolderContainer& addSubFolder(const Zstring& itemName, const FolderAttributes& attr)
{
auto& p = folders[itemName]; //value default-construction is okay here
- p.first = descr;
+ p.first = attr;
return p.second;
- //auto rv = folders.emplace(itemName, std::pair<FolderDescriptor, FolderContainer>(descr, FolderContainer()));
+ //auto rv = folders.emplace(itemName, std::pair<FolderAttributes, FolderContainer>(attr, FolderContainer()));
//if (!rv.second)
- // rv.first->second.first = descr;
+ // rv.first->second.first = attr;
//return rv.first->second.second;
}
};
@@ -201,34 +201,34 @@ public:
using FolderList = FixedList<FolderPair>;
FolderPair& addSubFolder(const Zstring& itemNameL,
- const FolderDescriptor& left, //file exists on both sides
+ const FolderAttributes& left, //file exists on both sides
CompareDirResult defaultCmpResult,
const Zstring& itemNameR,
- const FolderDescriptor& right);
+ const FolderAttributes& right);
template <SelectedSide side>
FolderPair& addSubFolder(const Zstring& itemName, //dir exists on one side only
- const FolderDescriptor& descr);
+ const FolderAttributes& attr);
FilePair& addSubFile(const Zstring& itemNameL,
- const FileDescriptor& left, //file exists on both sides
+ const FileAttributes& left, //file exists on both sides
CompareFilesResult defaultCmpResult,
const Zstring& itemNameR,
- const FileDescriptor& right);
+ const FileAttributes& right);
template <SelectedSide side>
FilePair& addSubFile(const Zstring& itemName, //file exists on one side only
- const FileDescriptor& descr);
+ const FileAttributes& attr);
SymlinkPair& addSubLink(const Zstring& itemNameL,
- const LinkDescriptor& left, //link exists on both sides
+ const LinkAttributes& left, //link exists on both sides
CompareSymlinkResult defaultCmpResult,
const Zstring& itemNameR,
- const LinkDescriptor& right);
+ const LinkAttributes& right);
template <SelectedSide side>
SymlinkPair& addSubLink(const Zstring& itemName, //link exists on one side only
- const LinkDescriptor& descr);
+ const LinkAttributes& attr);
const FileList& refSubFiles() const { return subFiles_; }
/**/ FileList& refSubFiles() { return subFiles_; }
@@ -446,12 +446,12 @@ public:
protected:
FileSystemObject(const Zstring& itemNameL,
const Zstring& itemNameR,
- ContainerObject& parent,
+ ContainerObject& parentObj,
CompareFilesResult defaultCmpResult) :
cmpResult_(defaultCmpResult),
itemNameL_(itemNameL),
itemNameR_(itemNameL == itemNameR ? itemNameL : itemNameR), //perf: no measurable speed drawback; -3% peak memory => further needed by ContainerObject construction!
- parent_(parent)
+ parent_(parentObj)
{
assert(itemNameL_.c_str() == itemNameR_.c_str() || itemNameL_ != itemNameR_); //also checks ref-counted string precondition
parent_.notifySyncCfgChanged();
@@ -508,15 +508,15 @@ public:
CompareDirResult getDirCategory() const; //returns actually used subset of CompareFilesResult
FolderPair(const Zstring& itemNameL, //use empty itemName if "not existing"
- const FolderDescriptor& descrL,
+ const FolderAttributes& attrL,
CompareDirResult defaultCmpResult,
const Zstring& itemNameR,
- const FolderDescriptor& descrR,
- ContainerObject& parent) :
- FileSystemObject(itemNameL, itemNameR, parent, static_cast<CompareFilesResult>(defaultCmpResult)),
+ const FolderAttributes& attrR,
+ ContainerObject& parentObj) :
+ FileSystemObject(itemNameL, itemNameR, parentObj, static_cast<CompareFilesResult>(defaultCmpResult)),
ContainerObject(static_cast<FileSystemObject&>(*this)), //FileSystemObject fully constructed at this point!
- descrL_(descrL),
- descrR_(descrR) {}
+ attrL_(attrL),
+ attrR_(attrR) {}
template <SelectedSide side> bool isFollowedSymlink() const;
@@ -533,8 +533,8 @@ private:
mutable Opt<SyncOperation> syncOpBuffered_; //determining sync-op for directory may be expensive as it depends on child-objects => buffer
- FolderDescriptor descrL_;
- FolderDescriptor descrR_;
+ FolderAttributes attrL_;
+ FolderAttributes attrR_;
};
@@ -548,19 +548,20 @@ public:
void accept(FSObjectVisitor& visitor) const override;
FilePair(const Zstring& itemNameL, //use empty string if "not existing"
- const FileDescriptor& descrL,
+ const FileAttributes& attrL,
CompareFilesResult defaultCmpResult,
const Zstring& itemNameR, //
- const FileDescriptor& descrR,
- ContainerObject& parent) :
- FileSystemObject(itemNameL, itemNameR, parent, defaultCmpResult),
- descrL_(descrL),
- descrR_(descrR) {}
-
- template <SelectedSide side> int64_t getLastWriteTime() const;
- template <SelectedSide side> uint64_t getFileSize() const;
- template <SelectedSide side> AFS::FileId getFileId () const;
- template <SelectedSide side> bool isFollowedSymlink() const;
+ const FileAttributes& attrR,
+ ContainerObject& parentObj) :
+ FileSystemObject(itemNameL, itemNameR, parentObj, defaultCmpResult),
+ attrL_(attrL),
+ attrR_(attrR) {}
+
+ template <SelectedSide side> int64_t getLastWriteTime() const;
+ template <SelectedSide side> uint64_t getFileSize() const;
+ template <SelectedSide side> AFS::FileId getFileId() const;
+ template <SelectedSide side> bool isFollowedSymlink() const;
+ template <SelectedSide side> FileAttributes getAttributes() const;
void setMoveRef(ObjectId refId) { moveFileRef_ = refId; } //reference to corresponding renamed file
ObjectId getMoveRef() const { return moveFileRef_; } //may be nullptr
@@ -587,11 +588,11 @@ private:
SyncOperation applyMoveOptimization(SyncOperation op) const;
void flip () override;
- void removeObjectL() override { descrL_ = FileDescriptor(); }
- void removeObjectR() override { descrR_ = FileDescriptor(); }
+ void removeObjectL() override { attrL_ = FileAttributes(); }
+ void removeObjectR() override { attrR_ = FileAttributes(); }
- FileDescriptor descrL_;
- FileDescriptor descrR_;
+ FileAttributes attrL_;
+ FileAttributes attrR_;
ObjectId moveFileRef_ = nullptr; //optional, filled by redetermineSyncDirection()
};
@@ -610,14 +611,14 @@ public:
CompareSymlinkResult getLinkCategory() const; //returns actually used subset of CompareFilesResult
SymlinkPair(const Zstring& itemNameL, //use empty string if "not existing"
- const LinkDescriptor& descrL,
+ const LinkAttributes& attrL,
CompareSymlinkResult defaultCmpResult,
const Zstring& itemNameR, //use empty string if "not existing"
- const LinkDescriptor& descrR,
- ContainerObject& parent) :
- FileSystemObject(itemNameL, itemNameR, parent, static_cast<CompareFilesResult>(defaultCmpResult)),
- descrL_(descrL),
- descrR_(descrR) {}
+ const LinkAttributes& attrR,
+ ContainerObject& parentObj) :
+ FileSystemObject(itemNameL, itemNameR, parentObj, static_cast<CompareFilesResult>(defaultCmpResult)),
+ attrL_(attrL),
+ attrR_(attrR) {}
template <SelectedSide sideTrg>
void setSyncedTo(const Zstring& itemName, //call after sync, sets SYMLINK_EQUAL
@@ -629,11 +630,11 @@ private:
Zstring getRelativePathR() const override { return AFS::appendPaths(parent().getRelativePath<RIGHT_SIDE>(), getItemName<RIGHT_SIDE>(), FILE_NAME_SEPARATOR); }
void flip() override;
- void removeObjectL() override { descrL_ = LinkDescriptor(); }
- void removeObjectR() override { descrR_ = LinkDescriptor(); }
+ void removeObjectL() override { attrL_ = LinkAttributes(); }
+ void removeObjectR() override { attrR_ = LinkAttributes(); }
- LinkDescriptor descrL_;
- LinkDescriptor descrR_;
+ LinkAttributes attrL_;
+ LinkAttributes attrR_;
};
//------------------------------------------------------------------
@@ -947,10 +948,10 @@ void ContainerObject::flip()
inline
FolderPair& ContainerObject::addSubFolder(const Zstring& itemNameL,
- const FolderDescriptor& left,
+ const FolderAttributes& left,
CompareDirResult defaultCmpResult,
const Zstring& itemNameR,
- const FolderDescriptor& right)
+ const FolderAttributes& right)
{
subFolders_.emplace_back(itemNameL, left, defaultCmpResult, itemNameR, right, *this);
return subFolders_.back();
@@ -958,27 +959,27 @@ FolderPair& ContainerObject::addSubFolder(const Zstring& itemNameL,
template <> inline
-FolderPair& ContainerObject::addSubFolder<LEFT_SIDE>(const Zstring& itemName, const FolderDescriptor& descr)
+FolderPair& ContainerObject::addSubFolder<LEFT_SIDE>(const Zstring& itemName, const FolderAttributes& attr)
{
- subFolders_.emplace_back(itemName, descr, DIR_LEFT_SIDE_ONLY, Zstring(), FolderDescriptor(), *this);
+ subFolders_.emplace_back(itemName, attr, DIR_LEFT_SIDE_ONLY, Zstring(), FolderAttributes(), *this);
return subFolders_.back();
}
template <> inline
-FolderPair& ContainerObject::addSubFolder<RIGHT_SIDE>(const Zstring& itemName, const FolderDescriptor& descr)
+FolderPair& ContainerObject::addSubFolder<RIGHT_SIDE>(const Zstring& itemName, const FolderAttributes& attr)
{
- subFolders_.emplace_back(Zstring(), FolderDescriptor(), DIR_RIGHT_SIDE_ONLY, itemName, descr, *this);
+ subFolders_.emplace_back(Zstring(), FolderAttributes(), DIR_RIGHT_SIDE_ONLY, itemName, attr, *this);
return subFolders_.back();
}
inline
FilePair& ContainerObject::addSubFile(const Zstring& itemNameL,
- const FileDescriptor& left, //file exists on both sides
+ const FileAttributes& left, //file exists on both sides
CompareFilesResult defaultCmpResult,
const Zstring& itemNameR,
- const FileDescriptor& right)
+ const FileAttributes& right)
{
subFiles_.emplace_back(itemNameL, left, defaultCmpResult, itemNameR, right, *this);
return subFiles_.back();
@@ -986,27 +987,27 @@ FilePair& ContainerObject::addSubFile(const Zstring& itemNameL,
template <> inline
-FilePair& ContainerObject::addSubFile<LEFT_SIDE>(const Zstring& itemName, const FileDescriptor& descr)
+FilePair& ContainerObject::addSubFile<LEFT_SIDE>(const Zstring& itemName, const FileAttributes& attr)
{
- subFiles_.emplace_back(itemName, descr, FILE_LEFT_SIDE_ONLY, Zstring(), FileDescriptor(), *this);
+ subFiles_.emplace_back(itemName, attr, FILE_LEFT_SIDE_ONLY, Zstring(), FileAttributes(), *this);
return subFiles_.back();
}
template <> inline
-FilePair& ContainerObject::addSubFile<RIGHT_SIDE>(const Zstring& itemName, const FileDescriptor& descr)
+FilePair& ContainerObject::addSubFile<RIGHT_SIDE>(const Zstring& itemName, const FileAttributes& attr)
{
- subFiles_.emplace_back(Zstring(), FileDescriptor(), FILE_RIGHT_SIDE_ONLY, itemName, descr, *this);
+ subFiles_.emplace_back(Zstring(), FileAttributes(), FILE_RIGHT_SIDE_ONLY, itemName, attr, *this);
return subFiles_.back();
}
inline
SymlinkPair& ContainerObject::addSubLink(const Zstring& itemNameL,
- const LinkDescriptor& left, //link exists on both sides
+ const LinkAttributes& left, //link exists on both sides
CompareSymlinkResult defaultCmpResult,
const Zstring& itemNameR,
- const LinkDescriptor& right)
+ const LinkAttributes& right)
{
subLinks_.emplace_back(itemNameL, left, defaultCmpResult, itemNameR, right, *this);
return subLinks_.back();
@@ -1014,17 +1015,17 @@ SymlinkPair& ContainerObject::addSubLink(const Zstring& itemNameL,
template <> inline
-SymlinkPair& ContainerObject::addSubLink<LEFT_SIDE>(const Zstring& itemName, const LinkDescriptor& descr)
+SymlinkPair& ContainerObject::addSubLink<LEFT_SIDE>(const Zstring& itemName, const LinkAttributes& attr)
{
- subLinks_.emplace_back(itemName, descr, SYMLINK_LEFT_SIDE_ONLY, Zstring(), LinkDescriptor(), *this);
+ subLinks_.emplace_back(itemName, attr, SYMLINK_LEFT_SIDE_ONLY, Zstring(), LinkAttributes(), *this);
return subLinks_.back();
}
template <> inline
-SymlinkPair& ContainerObject::addSubLink<RIGHT_SIDE>(const Zstring& itemName, const LinkDescriptor& descr)
+SymlinkPair& ContainerObject::addSubLink<RIGHT_SIDE>(const Zstring& itemName, const LinkAttributes& attr)
{
- subLinks_.emplace_back(Zstring(), LinkDescriptor(), SYMLINK_RIGHT_SIDE_ONLY, itemName, descr, *this);
+ subLinks_.emplace_back(Zstring(), LinkAttributes(), SYMLINK_RIGHT_SIDE_ONLY, itemName, attr, *this);
return subLinks_.back();
}
@@ -1043,7 +1044,7 @@ void FolderPair::flip()
{
ContainerObject ::flip(); //call base class versions
FileSystemObject::flip(); //
- std::swap(descrL_, descrR_);
+ std::swap(attrL_, attrR_);
}
@@ -1057,7 +1058,7 @@ void FolderPair::removeObjectL()
for (FolderPair& folder : refSubFolders())
folder.removeObject<LEFT_SIDE>();
- descrL_ = FolderDescriptor();
+ attrL_ = FolderAttributes();
}
@@ -1071,7 +1072,7 @@ void FolderPair::removeObjectR()
for (FolderPair& folder : refSubFolders())
folder.removeObject<RIGHT_SIDE>();
- descrR_ = FolderDescriptor();
+ attrR_ = FolderAttributes();
}
@@ -1093,42 +1094,49 @@ inline
void FilePair::flip()
{
FileSystemObject::flip(); //call base class version
- std::swap(descrL_, descrR_);
+ std::swap(attrL_, attrR_);
+}
+
+
+template <SelectedSide side> inline
+FileAttributes FilePair::getAttributes() const
+{
+ return SelectParam<side>::ref(attrL_, attrR_);
}
template <SelectedSide side> inline
int64_t FilePair::getLastWriteTime() const
{
- return SelectParam<side>::ref(descrL_, descrR_).lastWriteTimeRaw;
+ return SelectParam<side>::ref(attrL_, attrR_).modTime;
}
template <SelectedSide side> inline
uint64_t FilePair::getFileSize() const
{
- return SelectParam<side>::ref(descrL_, descrR_).fileSize;
+ return SelectParam<side>::ref(attrL_, attrR_).fileSize;
}
template <SelectedSide side> inline
AFS::FileId FilePair::getFileId() const
{
- return SelectParam<side>::ref(descrL_, descrR_).fileId;
+ return SelectParam<side>::ref(attrL_, attrR_).fileId;
}
template <SelectedSide side> inline
bool FilePair::isFollowedSymlink() const
{
- return SelectParam<side>::ref(descrL_, descrR_).isFollowedSymlink;
+ return SelectParam<side>::ref(attrL_, attrR_).isFollowedSymlink;
}
template <SelectedSide side> inline
bool FolderPair::isFollowedSymlink() const
{
- return SelectParam<side>::ref(descrL_, descrR_).isFollowedSymlink;
+ return SelectParam<side>::ref(attrL_, attrR_).isFollowedSymlink;
}
@@ -1145,8 +1153,8 @@ void FilePair::setSyncedTo(const Zstring& itemName,
//FILE_EQUAL is only allowed for same short name and file size: enforced by this method!
static const SelectedSide sideSrc = OtherSide<sideTrg>::result;
- SelectParam<sideTrg>::ref(descrL_, descrR_) = FileDescriptor(lastWriteTimeTrg, fileSize, fileIdTrg, isSymlinkTrg);
- SelectParam<sideSrc>::ref(descrL_, descrR_) = FileDescriptor(lastWriteTimeSrc, fileSize, fileIdSrc, isSymlinkSrc);
+ SelectParam<sideTrg>::ref(attrL_, attrR_) = FileAttributes(lastWriteTimeTrg, fileSize, fileIdTrg, isSymlinkTrg);
+ SelectParam<sideSrc>::ref(attrL_, attrR_) = FileAttributes(lastWriteTimeSrc, fileSize, fileIdSrc, isSymlinkSrc);
moveFileRef_ = nullptr;
FileSystemObject::setSynced(itemName); //set FileSystemObject specific part
@@ -1160,8 +1168,8 @@ void SymlinkPair::setSyncedTo(const Zstring& itemName,
{
static const SelectedSide sideSrc = OtherSide<sideTrg>::result;
- SelectParam<sideTrg>::ref(descrL_, descrR_) = LinkDescriptor(lastWriteTimeTrg);
- SelectParam<sideSrc>::ref(descrL_, descrR_) = LinkDescriptor(lastWriteTimeSrc);
+ SelectParam<sideTrg>::ref(attrL_, attrR_) = LinkAttributes(lastWriteTimeTrg);
+ SelectParam<sideSrc>::ref(attrL_, attrR_) = LinkAttributes(lastWriteTimeSrc);
FileSystemObject::setSynced(itemName); //set FileSystemObject specific part
}
@@ -1174,8 +1182,8 @@ void FolderPair::setSyncedTo(const Zstring& itemName,
{
static const SelectedSide sideSrc = OtherSide<sideTrg>::result;
- SelectParam<sideTrg>::ref(descrL_, descrR_) = FolderDescriptor(isSymlinkTrg);
- SelectParam<sideSrc>::ref(descrL_, descrR_) = FolderDescriptor(isSymlinkSrc);
+ SelectParam<sideTrg>::ref(attrL_, attrR_) = FolderAttributes(isSymlinkTrg);
+ SelectParam<sideSrc>::ref(attrL_, attrR_) = FolderAttributes(isSymlinkSrc);
FileSystemObject::setSynced(itemName); //set FileSystemObject specific part
}
@@ -1184,7 +1192,7 @@ void FolderPair::setSyncedTo(const Zstring& itemName,
template <SelectedSide side> inline
int64_t SymlinkPair::getLastWriteTime() const
{
- return SelectParam<side>::ref(descrL_, descrR_).lastWriteTimeRaw;
+ return SelectParam<side>::ref(attrL_, attrR_).modTime;
}
@@ -1199,7 +1207,7 @@ inline
void SymlinkPair::flip()
{
FileSystemObject::flip(); //call base class versions
- std::swap(descrL_, descrR_);
+ std::swap(attrL_, attrR_);
}
}
diff --git a/FreeFileSync/Source/fs/abstract.cpp b/FreeFileSync/Source/fs/abstract.cpp
index 00ed0d3c..5e933573 100755
--- a/FreeFileSync/Source/fs/abstract.cpp
+++ b/FreeFileSync/Source/fs/abstract.cpp
@@ -65,73 +65,105 @@ Opt<AfsPath> AFS::getParentAfsPath(const AfsPath& afsPath)
}
-AFS::FileAttribAfterCopy AFS::copyFileAsStream(const AfsPath& afsPathSource, const AbstractPath& apTarget, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- const IOCallback& notifyUnbufferedIO) const
+AFS::FileCopyResult AFS::copyFileAsStream(const AfsPath& afsPathSource, const StreamAttributes& attrSource, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const AbstractPath& apTarget, const IOCallback& notifyUnbufferedIO) const
{
int64_t totalUnbufferedIO = 0;
- auto streamIn = getInputStream(afsPathSource, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, ErrorFileLocked
- warn_static("save following file access to improve SFTP perf?")
- const uint64_t fileSizeExpected = streamIn->getFileSize (); //throw FileError
- const int64_t modificationTime = streamIn->getModificationTime(); //throw FileError
- const FileId sourceFileId = streamIn->getFileId (); //throw FileError
+ auto streamIn = getInputStream(afsPathSource, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, ErrorFileLocked, X
- auto streamOut = getOutputStream(apTarget, &fileSizeExpected, &modificationTime, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, ErrorTargetExisting
+ StreamAttributes attrSourceNew = {};
+ //try to get the most current attributes if possible (input file might have changed after comparison!)
+ if (Opt<StreamAttributes> attr = streamIn->getBufferedAttributes()) //throw FileError
+ attrSourceNew = *attr; //Native/MTP
+ else //use more stale ones:
+ attrSourceNew = attrSource; //SFTP/FTP
+ warn_static("evaluate: consequences of stale attributes")
+
+ auto streamOut = getOutputStream(apTarget, &attrSourceNew.fileSize, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, ErrorTargetExisting
bufferedStreamCopy(*streamIn, *streamOut); //throw FileError, X
const FileId targetFileId = streamOut->finalize(); //throw FileError, X
- //- modification time should be set here!
- //- checks if "expected == actual number of bytes written"
- //extra check: bytes reported via notifyUnbufferedIO() should match actual number of bytes written
- if (totalUnbufferedIO != 2 * makeSigned(fileSizeExpected))
+ //check if "expected == actual number of bytes written"
+ //-> extra check: bytes reported via notifyUnbufferedIO() should match actual number of bytes written
+ if (totalUnbufferedIO != 2 * makeSigned(attrSourceNew.fileSize))
throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtPath(AFS::getDisplayPath(apTarget))),
replaceCpy(replaceCpy(_("Unexpected size of data stream.\nExpected: %x bytes\nActual: %y bytes"),
- L"%x", numberTo<std::wstring>(2 * fileSizeExpected)),
+ L"%x", numberTo<std::wstring>(2 * attrSourceNew.fileSize)),
L"%y", numberTo<std::wstring>(totalUnbufferedIO)) + L" [notifyUnbufferedIO]");
- AFS::FileAttribAfterCopy attr;
- attr.fileSize = fileSizeExpected;
- attr.modificationTime = modificationTime;
- attr.sourceFileId = sourceFileId;
- attr.targetFileId = targetFileId;
- return attr;
+ Opt<FileError> errorModTime;
+ try
+ {
+ /*
+ is setting modtime after closing the file handle a pessimization?
+ Native: no, needed for functional correctness, see file_access.cpp
+ MTP: maybe a minor one (need to retrieve objectId one more time)
+ SFTP: no, needed for functional correctness, just as for Native
+ FTP: maybe a minor one: could set modtime via CURLOPT_POSTQUOTE (but this would internally trigger an extra round-trip anyway!)
+ */
+ setModTime(apTarget, attrSourceNew.modTime); //throw FileError, follows symlinks
+ }
+ catch (const FileError& e)
+ {
+ /*
+ Failing to set modification time is not a serious problem from synchronization perspective (treated like external update)
+
+ => Support additional scenarios:
+ - GVFS failing to set modTime for FTP: http://www.freefilesync.org/forum/viewtopic.php?t=2372
+ - GVFS failing to set modTime for MTP: http://www.freefilesync.org/forum/viewtopic.php?t=2803
+ - MTP failing to set modTime in general: fail non-silently rather than silently during file creation
+ - FTP failing to set modTime for servers lacking MFMT-support
+ */
+ errorModTime = FileError(e.toString()); //avoid slicing
+ }
+
+ AFS::FileCopyResult result;
+ result.fileSize = attrSourceNew.fileSize;
+ result.modTime = attrSourceNew.modTime;
+ result.sourceFileId = attrSourceNew.fileId;
+ result.targetFileId = targetFileId;
+ result.errorModTime = errorModTime;
+ return result;
}
-AFS::FileAttribAfterCopy AFS::copyFileTransactional(const AbstractPath& apSource, const AbstractPath& apTarget, //throw FileError, ErrorFileLocked
- bool copyFilePermissions,
- bool transactionalCopy,
- const std::function<void()>& onDeleteTargetFile,
- const IOCallback& notifyUnbufferedIO)
+AFS::FileCopyResult AFS::copyFileTransactional(const AbstractPath& apSource, const StreamAttributes& attrSource, //throw FileError, ErrorFileLocked
+ const AbstractPath& apTarget,
+ bool copyFilePermissions,
+ bool transactionalCopy,
+ const std::function<void()>& onDeleteTargetFile,
+ const IOCallback& notifyUnbufferedIO)
{
auto copyFileBestEffort = [&](const AbstractPath& apTargetTmp)
{
//caveat: typeid returns static type for pointers, dynamic type for references!!!
if (typeid(*apSource.afs) == typeid(*apTarget.afs))
- return apSource.afs->copyFileForSameAfsType(apSource.afsPath, apTargetTmp, copyFilePermissions, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ return apSource.afs->copyFileForSameAfsType(apSource.afsPath, attrSource,
+ apTargetTmp, copyFilePermissions, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
//fall back to stream-based file copy:
if (copyFilePermissions)
throw FileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtPath(AFS::getDisplayPath(apTargetTmp))),
_("Operation not supported for different base folder types."));
- return apSource.afs->copyFileAsStream(apSource.afsPath, apTargetTmp, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ return apSource.afs->copyFileAsStream(apSource.afsPath, attrSource, apTargetTmp, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
};
if (transactionalCopy)
{
AbstractPath apTargetTmp(apTarget.afs, AfsPath(apTarget.afsPath.value + TEMP_FILE_ENDING));
- AFS::FileAttribAfterCopy attr;
+ AFS::FileCopyResult result;
for (int i = 0;; ++i)
try
{
- attr = copyFileBestEffort(apTargetTmp); //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ result = copyFileBestEffort(apTargetTmp); //throw FileError, ErrorTargetExisting, ErrorFileLocked
break;
}
- catch (const ErrorTargetExisting&) //optimistic strategy: assume everything goes well, but recover on error -> minimize file accesses
+ catch (ErrorTargetExisting&) //optimistic strategy: assume everything goes well, but recover on error -> minimize file accesses
{
if (i == 10) throw; //avoid endless recursion in pathological cases, e.g. http://www.freefilesync.org/forum/viewtopic.php?t=1592
apTargetTmp.afsPath.value = apTarget.afsPath.value + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING;
@@ -155,7 +187,7 @@ AFS::FileAttribAfterCopy AFS::copyFileTransactional(const AbstractPath& apSource
https://blogs.msdn.microsoft.com/oldnewthing/20050715-14/?p=34923
http://support.microsoft.com/kb/172190/en-us
*/
- return attr;
+ return result;
}
else
{
@@ -219,6 +251,7 @@ private:
}
+//essentially an (abstract) duplicate of zen::getPathStatus()
AFS::PathStatusImpl AFS::getPathStatusViaFolderTraversal(const AfsPath& afsPath) const //throw FileError
{
const Opt<AfsPath> parentAfsPath = getParentAfsPath(afsPath);
@@ -238,21 +271,18 @@ AFS::PathStatusImpl AFS::getPathStatusViaFolderTraversal(const AfsPath& afsPath)
assert(!itemName.empty());
PathStatusImpl ps = getPathStatusViaFolderTraversal(*parentAfsPath); //throw FileError
- if (!ps.relPath.empty())
- {
- ps.relPath.push_back(itemName);
- return { ps.existingType, ps.existingAfsPath, ps.relPath };
- }
-
- try
- {
- ItemSearchCallback iscb(itemName);
- traverseFolder(*parentAfsPath, iscb); //throw FileError, ItemType
-
- return { ps.existingType, *parentAfsPath, { itemName } }; //throw FileError
- }
- catch (const ItemType& type) { return { type, afsPath, {} }; } //yes, exceptions for control-flow are bad design... but, but...
+ if (ps.relPath.empty() &&
+ ps.existingType != ItemType::FILE) //obscure, but possible (and not an error)
+ try
+ {
+ ItemSearchCallback iscb(itemName);
+ traverseFolder(*parentAfsPath, iscb); //throw FileError, ItemType
+ }
+ catch (const ItemType& type) { return { type, afsPath, {} }; } //yes, exceptions for control-flow are bad design... but, but...
//we're not CPU-bound here and finding the item after getItemType() previously failed is exceptional (even C:\pagefile.sys should be found)
+
+ ps.relPath.push_back(itemName);
+ return ps;
}
diff --git a/FreeFileSync/Source/fs/abstract.h b/FreeFileSync/Source/fs/abstract.h
index c5c2b7cf..1ab1384d 100755
--- a/FreeFileSync/Source/fs/abstract.h
+++ b/FreeFileSync/Source/fs/abstract.h
@@ -113,10 +113,9 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
static void removeSymlinkPlain(const AbstractPath& ap) { ap.afs->removeSymlinkPlain(ap.afsPath); } //throw FileError
static void removeFolderPlain (const AbstractPath& ap) { ap.afs->removeFolderPlain (ap.afsPath); } //throw FileError
//----------------------------------------------------------------------------------------------------------------
- static void setModTime (const AbstractPath& ap, int64_t modificationTime) { ap.afs->setModTime (ap.afsPath, modificationTime); } //throw FileError, follows symlinks
- static void setModTimeSymlink(const AbstractPath& ap, int64_t modificationTime) { ap.afs->setModTimeSymlink(ap.afsPath, modificationTime); } //throw FileError
+ static void setModTime(const AbstractPath& ap, int64_t modTime) { ap.afs->setModTime (ap.afsPath, modTime); } //throw FileError, follows symlinks
- static AbstractPath getResolvedSymlinkPath(const AbstractPath& ap) { return ap.afs->getResolvedSymlinkPath(ap.afsPath); } //throw FileError
+ static AbstractPath getSymlinkResolvedPath(const AbstractPath& ap) { return ap.afs->getSymlinkResolvedPath(ap.afsPath); } //throw FileError
static std::string getSymlinkBinaryContent(const AbstractPath& ap) { return ap.afs->getSymlinkBinaryContent(ap.afsPath); } //throw FileError
//----------------------------------------------------------------------------------------------------------------
//noexcept; optional return value:
@@ -128,15 +127,22 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
using FileId = Zbase<char>;
+ struct StreamAttributes
+ {
+ int64_t modTime; //number of seconds since Jan. 1st 1970 UTC, same semantics like time_t (== signed long)
+ uint64_t fileSize;
+ FileId fileId; //optional!
+ };
+
//----------------------------------------------------------------------------------------------------------------
struct InputStream
{
virtual ~InputStream() {}
virtual size_t read(void* buffer, size_t bytesToRead) = 0; //throw FileError, X; return "bytesToRead" bytes unless end of stream!
virtual size_t getBlockSize() const = 0; //non-zero block size is AFS contract! it's implementers job to always give a reasonable buffer size!
- virtual FileId getFileId () = 0; //throw FileError
- virtual int64_t getModificationTime() = 0; //throw FileError
- virtual uint64_t getFileSize () = 0; //throw FileError
+
+ //only returns attributes if they are already buffered within stream handle and determination would be otherwise expensive (e.g. FTP/SFTP):
+ virtual Opt<StreamAttributes> getBufferedAttributes() = 0; //throw FileError
};
struct OutputStreamImpl
@@ -163,14 +169,13 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
};
//return value always bound:
- static std::unique_ptr<InputStream > getInputStream (const AbstractPath& ap, const IOCallback& notifyUnbufferedIO) //throw FileError, ErrorFileLocked
+ static std::unique_ptr<InputStream > getInputStream(const AbstractPath& ap, const IOCallback& notifyUnbufferedIO) //throw FileError, ErrorFileLocked, X
{ return ap.afs->getInputStream(ap.afsPath, notifyUnbufferedIO); }
static std::unique_ptr<OutputStream> getOutputStream(const AbstractPath& ap, //throw FileError, ErrorTargetExisting
- const uint64_t* streamSize, //
- const int64_t* modificationTime, //optional
+ const uint64_t* streamSize, //optional
const IOCallback& notifyUnbufferedIO) //
- { return std::make_unique<OutputStream>(ap.afs->getOutputStream(ap.afsPath, streamSize, modificationTime, notifyUnbufferedIO), ap, streamSize); }
+ { return std::make_unique<OutputStream>(ap.afs->getOutputStream(ap.afsPath, streamSize, notifyUnbufferedIO), ap, streamSize); }
//----------------------------------------------------------------------------------------------------------------
struct TraverserCallback
@@ -180,15 +185,15 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
struct SymlinkInfo
{
Zstring itemName;
- int64_t lastWriteTime; //number of seconds since Jan. 1st 1970 UTC
+ int64_t modTime; //number of seconds since Jan. 1st 1970 UTC
};
struct FileInfo
{
Zstring itemName;
- uint64_t fileSize; //unit: bytes!
- int64_t lastWriteTime; //number of seconds since Jan. 1st 1970 UTC
- FileId id; //optional: empty if not supported!
+ uint64_t fileSize; //unit: bytes!
+ int64_t modTime; //number of seconds since Jan. 1st 1970 UTC
+ FileId fileId; //optional: empty if not supported!
const SymlinkInfo* symlinkInfo; //only filled if file is a followed symlink
};
@@ -225,12 +230,13 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
static bool supportPermissionCopy(const AbstractPath& apSource, const AbstractPath& apTarget); //throw FileError
- struct FileAttribAfterCopy
+ struct FileCopyResult
{
uint64_t fileSize = 0;
- int64_t modificationTime = 0; //time_t UTC compatible
+ int64_t modTime = 0; //time_t-compatible (UTC)
FileId sourceFileId;
FileId targetFileId;
+ Opt<FileError> errorModTime; //failure to set modification time
};
//return current attributes at the time of copy
//symlink handling: dereference source
@@ -239,14 +245,15 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t
// => clean them up at an appropriate time (automatically set sync directions to delete them). They have the following ending:
static const Zchar* TEMP_FILE_ENDING; //don't use Zstring as global constant: avoid static initialization order problem in global namespace!
- static FileAttribAfterCopy copyFileTransactional(const AbstractPath& apSource, const AbstractPath& apTarget, //throw FileError, ErrorFileLocked
- bool copyFilePermissions,
- bool transactionalCopy,
- //if target is existing user needs to implement deletion: copyFile() NEVER overwrites target if already existing!
- //if transactionalCopy == true, full read access on source had been proven at this point, so it's safe to delete it.
- const std::function<void()>& onDeleteTargetFile,
- //accummulated delta != file size! consider ADS, sparse, compressed files
- const IOCallback& notifyUnbufferedIO);
+ static FileCopyResult copyFileTransactional(const AbstractPath& apSource, const StreamAttributes& attrSource, //throw FileError, ErrorFileLocked
+ const AbstractPath& apTarget,
+ bool copyFilePermissions,
+ bool transactionalCopy,
+ //if target is existing user needs to implement deletion: copyFile() NEVER overwrites target if already existing!
+ //if transactionalCopy == true, full read access on source had been proven at this point, so it's safe to delete it.
+ const std::function<void()>& onDeleteTargetFile,
+ //accummulated delta != file size! consider ADS, sparse, compressed files
+ const IOCallback& notifyUnbufferedIO);
static void copyNewFolder(const AbstractPath& apSource, const AbstractPath& apTarget, bool copyFilePermissions); //throw FileError
static void copySymlink (const AbstractPath& apSource, const AbstractPath& apTarget, bool copyFilePermissions); //throw FileError
@@ -292,8 +299,8 @@ protected: //grant derived classes access to AbstractPath:
};
PathStatusImpl getPathStatusViaFolderTraversal(const AfsPath& afsPath) const; //throw FileError
- FileAttribAfterCopy copyFileAsStream(const AfsPath& afsPathSource, const AbstractPath& apTarget, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- const IOCallback& notifyUnbufferedIO) const; //may be nullptr; throw X!
+ FileCopyResult copyFileAsStream(const AfsPath& afsPathSource, const StreamAttributes& attrSource, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const AbstractPath& apTarget, const IOCallback& notifyUnbufferedIO) const; //may be nullptr; throw X!
private:
virtual Opt<Zstring> getNativeItemPath(const AfsPath& afsPath) const { return NoValue(); };
@@ -318,27 +325,24 @@ private:
virtual void removeSymlinkPlain(const AfsPath& afsPath) const = 0; //throw FileError
virtual void removeFolderPlain (const AfsPath& afsPath) const = 0; //throw FileError
//----------------------------------------------------------------------------------------------------------------
- virtual void setModTime (const AfsPath& afsPath, int64_t modificationTime) const = 0; //throw FileError, follows symlinks
- virtual void setModTimeSymlink(const AfsPath& afsPath, int64_t modificationTime) const = 0; //throw FileError
-
- virtual AbstractPath getResolvedSymlinkPath(const AfsPath& afsPath) const = 0; //throw FileError
+ virtual void setModTime(const AfsPath& afsPath, int64_t modTime) const = 0; //throw FileError, follows symlinks
+ virtual AbstractPath getSymlinkResolvedPath(const AfsPath& afsPath) const = 0; //throw FileError
virtual std::string getSymlinkBinaryContent(const AfsPath& afsPath) const = 0; //throw FileError
-
//----------------------------------------------------------------------------------------------------------------
- virtual std::unique_ptr<InputStream > getInputStream (const AfsPath& afsPath, const IOCallback& notifyUnbufferedIO) const = 0; //throw FileError, ErrorFileLocked
- virtual std::unique_ptr<OutputStreamImpl> getOutputStream(const AfsPath& afsPath, //throw FileError, ErrorTargetExisting
- const uint64_t* streamSize, //
- const int64_t* modificationTime, //optional
+ virtual std::unique_ptr<InputStream > getInputStream (const AfsPath& afsPath, const IOCallback& notifyUnbufferedIO) const = 0; //throw FileError, ErrorFileLocked, X
+ virtual std::unique_ptr<OutputStreamImpl> getOutputStream(const AfsPath& afsPath, //throw FileError, ErrorTargetExisting
+ const uint64_t* streamSize, //optional
const IOCallback& notifyUnbufferedIO) const = 0; //
//----------------------------------------------------------------------------------------------------------------
virtual void traverseFolder(const AfsPath& afsPath, TraverserCallback& sink) const = 0; //noexcept
//----------------------------------------------------------------------------------------------------------------
//symlink handling: follow link!
- virtual FileAttribAfterCopy copyFileForSameAfsType(const AfsPath& afsPathSource, const AbstractPath& apTarget, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- //accummulated delta != file size! consider ADS, sparse, compressed files
- const IOCallback& notifyUnbufferedIO) const = 0; //may be nullptr; throw X!
+ virtual FileCopyResult copyFileForSameAfsType(const AfsPath& afsPathSource, const StreamAttributes& attrSource, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const AbstractPath& apTarget, bool copyFilePermissions,
+ //accummulated delta != file size! consider ADS, sparse, compressed files
+ const IOCallback& notifyUnbufferedIO) const = 0; //may be nullptr; throw X!
//symlink handling: follow link!
virtual void copyNewFolderForSameAfsType(const AfsPath& afsPathSource, const AbstractPath& apTarget, bool copyFilePermissions) const = 0; //throw FileError
diff --git a/FreeFileSync/Source/fs/native.cpp b/FreeFileSync/Source/fs/native.cpp
index 53f5d207..0603c3f8 100755
--- a/FreeFileSync/Source/fs/native.cpp
+++ b/FreeFileSync/Source/fs/native.cpp
@@ -60,56 +60,35 @@ struct InputStreamNative : public AbstractFileSystem::InputStream
{
InputStreamNative(const Zstring& filePath, const IOCallback& notifyUnbufferedIO) : fi_(filePath, notifyUnbufferedIO) {} //throw FileError, ErrorFileLocked
- size_t read(void* buffer, size_t bytesToRead) override { return fi_.read(buffer, bytesToRead); } //throw FileError, X; return "bytesToRead" bytes unless end of stream!
- size_t getBlockSize() const override { return fi_.getBlockSize(); } //non-zero block size is AFS contract!
- AFS::FileId getFileId () override; //throw FileError
- int64_t getModificationTime() override; //throw FileError
- uint64_t getFileSize () override; //throw FileError
+ size_t read(void* buffer, size_t bytesToRead) override { return fi_.read(buffer, bytesToRead); } //throw FileError, X; return "bytesToRead" bytes unless end of stream!
+ size_t getBlockSize() const override { return fi_.getBlockSize(); } //non-zero block size is AFS contract!
+ Opt<AFS::StreamAttributes> getBufferedAttributes() override; //throw FileError
private:
- const FileAttribs& getBufferedAttributes() //throw FileError
- {
- if (!fileAttr_)
- fileAttr_ = getFileAttributes(fi_.getHandle(), fi_.getFilePath()); //throw FileError
- return *fileAttr_;
- }
-
FileInput fi_;
- Opt<FileAttribs> fileAttr_;
};
-inline
-AFS::FileId InputStreamNative::getFileId()
+Opt<AFS::StreamAttributes> InputStreamNative::getBufferedAttributes() //throw FileError
{
- return convertToAbstractFileId(extractFileId(getBufferedAttributes())); //throw FileError
-}
+ const FileAttribs fileAttr = getFileAttributes(fi_.getHandle(), fi_.getFilePath()); //throw FileError
+ const int64_t modTime = fileAttr.st_mtime;
-inline
-int64_t InputStreamNative::getModificationTime()
-{
- return getBufferedAttributes().st_mtime; //throw FileError
-}
+ const uint64_t fileSize = makeUnsigned(fileAttr.st_size);
+ const AFS::FileId fileId = convertToAbstractFileId(extractFileId(fileAttr));
-inline
-uint64_t InputStreamNative::getFileSize()
-{
- const FileAttribs& fa = getBufferedAttributes(); //throw FileError
- return makeUnsigned(fa.st_size); //throw FileError
+ return AFS::StreamAttributes({ modTime, fileSize, fileId });
}
//===========================================================================================================================
struct OutputStreamNative : public AbstractFileSystem::OutputStreamImpl
{
- OutputStreamNative(const Zstring& filePath, const uint64_t* streamSize, const int64_t* modTime, const IOCallback& notifyUnbufferedIO) :
+ OutputStreamNative(const Zstring& filePath, const uint64_t* streamSize, const IOCallback& notifyUnbufferedIO) :
fo_(filePath, FileOutput::ACC_CREATE_NEW, notifyUnbufferedIO) //throw FileError, ErrorTargetExisting
{
- if (modTime)
- modTime_ = *modTime;
-
if (streamSize) //pre-allocate file space, because we can
fo_.preAllocateSpaceBestEffort(*streamSize); //throw FileError
}
@@ -122,24 +101,11 @@ struct OutputStreamNative : public AbstractFileSystem::OutputStreamImpl
fo_.finalize(); //throw FileError, X
- try
- {
- if (modTime_)
- zen::setFileTime(fo_.getFilePath(), *modTime_, ProcSymlink::FOLLOW); //throw FileError
- }
- catch (FileError&)
- {
- throw;
- //Failing to set modification time is not a serious problem from synchronization
- //perspective (treated like external update), except for the inconvenience.
- //Support additional scenarios like writing to FTP on Linux? Keep strict handling for now.
- }
return fileId;
}
private:
FileOutput fo_;
- Opt<int64_t> modTime_;
};
//===========================================================================================================================
@@ -217,25 +183,18 @@ private:
}
//----------------------------------------------------------------------------------------------------------------
-
- void setModTime(const AfsPath& afsPath, int64_t modificationTime) const override //throw FileError, follows symlinks
+ void setModTime(const AfsPath& afsPath, int64_t modTime) const override //throw FileError, follows symlinks
{
initComForThread(); //throw FileError
- zen::setFileTime(getNativePath(afsPath), modificationTime, ProcSymlink::FOLLOW); //throw FileError
+ zen::setFileTime(getNativePath(afsPath), modTime, ProcSymlink::FOLLOW); //throw FileError
}
- void setModTimeSymlink(const AfsPath& afsPath, int64_t modificationTime) const override //throw FileError
- {
- initComForThread(); //throw FileError
- zen::setFileTime(getNativePath(afsPath), modificationTime, ProcSymlink::DIRECT); //throw FileError
- }
-
- AbstractPath getResolvedSymlinkPath(const AfsPath& afsPath) const override //throw FileError
+ AbstractPath getSymlinkResolvedPath(const AfsPath& afsPath) const override //throw FileError
{
initComForThread(); //throw FileError
const Zstring nativePath = getNativePath(afsPath);
- const Zstring resolvedPath = zen::getResolvedSymlinkPath(nativePath); //throw FileError
+ const Zstring resolvedPath = zen::getSymlinkResolvedPath(nativePath); //throw FileError
const Opt<zen::PathComponents> comp = parsePathComponents(resolvedPath);
if (!comp)
throw FileError(replaceCpy(_("Cannot determine final path for %x."), L"%x", fmtPath(nativePath)),
@@ -252,22 +211,21 @@ private:
std::string content = utfTo<std::string>(getSymlinkTargetRaw(nativePath)); //throw FileError
return content;
}
-
//----------------------------------------------------------------------------------------------------------------
+
//return value always bound:
- std::unique_ptr<InputStream> getInputStream(const AfsPath& afsPath, const IOCallback& notifyUnbufferedIO) const override //throw FileError, ErrorFileLocked
+ std::unique_ptr<InputStream> getInputStream(const AfsPath& afsPath, const IOCallback& notifyUnbufferedIO) const override //throw FileError, ErrorFileLocked, (X)
{
initComForThread(); //throw FileError
return std::make_unique<InputStreamNative>(getNativePath(afsPath), notifyUnbufferedIO); //throw FileError, ErrorFileLocked
}
- std::unique_ptr<OutputStreamImpl> getOutputStream(const AfsPath& afsPath, //throw FileError, ErrorTargetExisting
- const uint64_t* streamSize, //
- const int64_t* modificationTime, //optional
+ std::unique_ptr<OutputStreamImpl> getOutputStream(const AfsPath& afsPath, //throw FileError, ErrorTargetExisting
+ const uint64_t* streamSize, //optional
const IOCallback& notifyUnbufferedIO) const override //
{
initComForThread(); //throw FileError
- return std::make_unique<OutputStreamNative>(getNativePath(afsPath), streamSize, modificationTime, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting
+ return std::make_unique<OutputStreamNative>(getNativePath(afsPath), streamSize, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting
}
//----------------------------------------------------------------------------------------------------------------
@@ -278,21 +236,22 @@ private:
//----------------------------------------------------------------------------------------------------------------
//symlink handling: follow link!
- FileAttribAfterCopy copyFileForSameAfsType(const AfsPath& afsPathSource, const AbstractPath& apTarget, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- const IOCallback& notifyUnbufferedIO) const override //may be nullptr; throw X!
+ FileCopyResult copyFileForSameAfsType(const AfsPath& afsPathSource, const StreamAttributes& attrSource, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const AbstractPath& apTarget, bool copyFilePermissions, const IOCallback& notifyUnbufferedIO) const override //may be nullptr; throw X!
{
const Zstring nativePathTarget = static_cast<const NativeFileSystem&>(getAfs(apTarget)).getNativePath(getAfsPath(apTarget));
initComForThread(); //throw FileError
- const InSyncAttributes attrNew = copyNewFile(getNativePath(afsPathSource), nativePathTarget, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- copyFilePermissions, notifyUnbufferedIO); //may be nullptr; throw X!
- FileAttribAfterCopy attrOut;
- attrOut.fileSize = attrNew.fileSize;
- attrOut.modificationTime = attrNew.modificationTime;
- attrOut.sourceFileId = convertToAbstractFileId(attrNew.sourceFileId);
- attrOut.targetFileId = convertToAbstractFileId(attrNew.targetFileId);
- return attrOut;
+ const zen::FileCopyResult nativeResult = copyNewFile(getNativePath(afsPathSource), nativePathTarget, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ copyFilePermissions, notifyUnbufferedIO); //may be nullptr; throw X!
+ FileCopyResult result;
+ result.fileSize = nativeResult.fileSize;
+ result.modTime = nativeResult.modTime;
+ result.sourceFileId = convertToAbstractFileId(nativeResult.sourceFileId);
+ result.targetFileId = convertToAbstractFileId(nativeResult.targetFileId);
+ result.errorModTime = nativeResult.errorModTime;
+ return result;
}
//symlink handling: follow link!
diff --git a/FreeFileSync/Source/lib/binary.cpp b/FreeFileSync/Source/lib/binary.cpp
index 95ea797a..0b7d8905 100755
--- a/FreeFileSync/Source/lib/binary.cpp
+++ b/FreeFileSync/Source/lib/binary.cpp
@@ -38,7 +38,7 @@ const size_t BLOCK_SIZE_MAX = 16 * 1024 * 1024;
struct StreamReader
{
StreamReader(const AbstractPath& filePath, const IOCallback& notifyUnbufferedIO) :
- stream_(AFS::getInputStream(filePath, notifyUnbufferedIO)), //throw FileError, (ErrorFileLocked)
+ stream_(AFS::getInputStream(filePath, notifyUnbufferedIO)), //throw FileError, (ErrorFileLocked), X
defaultBlockSize_(stream_->getBlockSize()),
dynamicBlockSize_(defaultBlockSize_) { assert(defaultBlockSize_ > 0); }
@@ -96,7 +96,7 @@ bool zen::filesHaveSameContent(const AbstractPath& filePath1, const AbstractPath
{
int64_t totalUnbufferedIO = 0;
- StreamReader reader1(filePath1, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, (ErrorFileLocked)
+ StreamReader reader1(filePath1, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //throw FileError, (ErrorFileLocked), X
StreamReader reader2(filePath2, IOCallbackDivider(notifyUnbufferedIO, totalUnbufferedIO)); //
StreamReader* readerLow = &reader1;
diff --git a/FreeFileSync/Source/lib/db_file.cpp b/FreeFileSync/Source/lib/db_file.cpp
index 4768c245..5f37558c 100755
--- a/FreeFileSync/Source/lib/db_file.cpp
+++ b/FreeFileSync/Source/lib/db_file.cpp
@@ -52,9 +52,8 @@ AbstractPath getDatabaseFilePath(const BaseFolderPair& baseFolder, bool tempfile
void saveStreams(const DbStreams& streamList, const AbstractPath& dbPath, const IOCallback& notifyUnbufferedIO) //throw FileError
{
- const std::unique_ptr<AFS::OutputStream> fileStreamOut = AFS::getOutputStream(dbPath, //throw FileError, ErrorTargetExisting
+ const std::unique_ptr<AFS::OutputStream> fileStreamOut = AFS::getOutputStream(dbPath, //throw FileError, ErrorTargetExisting
nullptr /*streamSize*/,
- nullptr /*modificationTime*/,
notifyUnbufferedIO /*throw X*/);
//write FreeFileSync file identifier
writeArray(*fileStreamOut, FILE_FORMAT_DESCR, sizeof(FILE_FORMAT_DESCR)); //throw FileError, X
@@ -83,7 +82,7 @@ DbStreams loadStreams(const AbstractPath& dbPath, const IOCallback& notifyUnbuff
{
try
{
- const std::unique_ptr<AFS::InputStream> fileStreamIn = AFS::getInputStream(dbPath, notifyUnbufferedIO); //throw FileError, ErrorFileLocked
+ const std::unique_ptr<AFS::InputStream> fileStreamIn = AFS::getInputStream(dbPath, notifyUnbufferedIO); //throw FileError, ErrorFileLocked, X
//read FreeFileSync file identifier
char formatDescr[sizeof(FILE_FORMAT_DESCR)] = {};
@@ -263,14 +262,14 @@ private:
static void writeFileDescr(MemoryStreamOut<ByteArray>& streamOut, const InSyncDescrFile& descr)
{
- writeNumber<std::int64_t>(streamOut, descr.lastWriteTimeRaw);
+ writeNumber<std::int64_t>(streamOut, descr.modTime);
writeContainer(streamOut, descr.fileId);
static_assert(IsSameType<decltype(descr.fileId), Zbase<char>>::value, "");
}
static void writeLinkDescr(MemoryStreamOut<ByteArray>& streamOut, const InSyncDescrLink& descr)
{
- writeNumber<int64_t>(streamOut, descr.lastWriteTimeRaw);
+ writeNumber<int64_t>(streamOut, descr.modTime);
}
//maximize zlib compression by grouping similar data (=> 20% size reduction!)
@@ -452,16 +451,16 @@ private:
static InSyncDescrFile readFileDescr(MemoryStreamIn<ByteArray>& streamIn) //throw UnexpectedEndOfStreamError
{
//attention: order of function argument evaluation is undefined! So do it one after the other...
- const auto lastWriteTimeRaw = readNumber<int64_t>(streamIn); //throw UnexpectedEndOfStreamError
+ const auto modTime = readNumber<int64_t>(streamIn); //throw UnexpectedEndOfStreamError
const AFS::FileId fileId = readContainer<Zbase<char>>(streamIn);
- return InSyncDescrFile(lastWriteTimeRaw, fileId);
+ return InSyncDescrFile(modTime, fileId);
}
static InSyncDescrLink readLinkDescr(MemoryStreamIn<ByteArray>& streamIn) //throw UnexpectedEndOfStreamError
{
- const auto lastWriteTimeRaw = readNumber<int64_t>(streamIn);
- return InSyncDescrLink(lastWriteTimeRaw);
+ const auto modTime = readNumber<int64_t>(streamIn);
+ return InSyncDescrLink(modTime);
}
//TODO: remove migration code at some time! 2017-02-01
@@ -777,7 +776,7 @@ private:
std::pair<DbStreams::const_iterator,
- DbStreams::const_iterator> getCommonSession(const DbStreams& streamsLeft, const DbStreams& streamsRight, //throw FileError, FileErrorDatabaseNotExisting
+ DbStreams::const_iterator> getCommonSession(const DbStreams& streamsLeft, const DbStreams& streamsRight, //throw FileError, FileErrorDatabaseNotExisting
const std::wstring& displayFilePathL, //used for diagnostics only
const std::wstring& displayFilePathR)
{
@@ -805,7 +804,7 @@ std::pair<DbStreams::const_iterator,
if (itCommonL == streamsLeft.end())
throw FileErrorDatabaseNotExisting(_("Initial synchronization:") + L" \n" +
- _("Database files do not yet contain information about the last synchronisation."));
+ _("The database files do not yet contain information about the last synchronization."));
return std::make_pair(itCommonL, itCommonR);
}
diff --git a/FreeFileSync/Source/lib/db_file.h b/FreeFileSync/Source/lib/db_file.h
index 77ffb69f..6b4be6c7 100755
--- a/FreeFileSync/Source/lib/db_file.h
+++ b/FreeFileSync/Source/lib/db_file.h
@@ -15,21 +15,21 @@ namespace zen
{
const Zchar SYNC_DB_FILE_ENDING[] = Zstr(".ffs_db"); //don't use Zstring as global constant: avoid static initialization order problem in global namespace!
-struct InSyncDescrFile //subset of FileDescriptor
+struct InSyncDescrFile //subset of FileAttributes
{
- InSyncDescrFile(int64_t lastWriteTimeRawIn, const AFS::FileId& idIn) :
- lastWriteTimeRaw(lastWriteTimeRawIn),
+ InSyncDescrFile(int64_t modTimeIn, const AFS::FileId& idIn) :
+ modTime(modTimeIn),
fileId(idIn) {}
- int64_t lastWriteTimeRaw;
+ int64_t modTime;
AFS::FileId fileId; // == file id: optional! (however, always set on Linux, and *generally* available on Windows)
};
struct InSyncDescrLink
{
- explicit InSyncDescrLink(int64_t lastWriteTimeRawIn) : lastWriteTimeRaw(lastWriteTimeRawIn) {}
+ explicit InSyncDescrLink(int64_t modTimeIn) : modTime(modTimeIn) {}
- int64_t lastWriteTimeRaw;
+ int64_t modTime;
};
diff --git a/FreeFileSync/Source/lib/help_provider.h b/FreeFileSync/Source/lib/help_provider.h
index 9b9c69e2..ab70ee29 100755
--- a/FreeFileSync/Source/lib/help_provider.h
+++ b/FreeFileSync/Source/lib/help_provider.h
@@ -48,7 +48,7 @@ void displayHelpEntry(const wxString& topic, wxWindow* parent)
{
const wxString section = L"html/" + topic + L".html";
wxHtmlModalHelp dlg(parent, utfTo<wxString>(zen::getResourceDirPf()) + L"Help/FreeFileSync.hhp", section,
- wxHF_DEFAULT_STYLE | wxHF_DIALOG | wxHF_MODAL | wxHF_MERGE_BOOKS);
+ wxHF_DEFAULT_STYLE | wxHF_DIALOG | wxHF_MODAL | wxHF_MERGE_BOOKS);
(void)dlg;
//-> solves modal help craziness on OSX!
//-> Suse Linux: avoids program hang on exit if user closed help parent dialog before the help dialog itself was closed (why is this even possible???)
diff --git a/FreeFileSync/Source/lib/parallel_scan.cpp b/FreeFileSync/Source/lib/parallel_scan.cpp
index 68927d15..838c4497 100755
--- a/FreeFileSync/Source/lib/parallel_scan.cpp
+++ b/FreeFileSync/Source/lib/parallel_scan.cpp
@@ -361,7 +361,7 @@ void DirCallback::onFile(const FileInfo& fi) //throw ThreadInterruption
Linux: retrieveFileID takes about 50% longer in VM! (avoidable because of redundant stat() call!)
*/
- output_.addSubFile(fi.itemName, FileDescriptor(fi.lastWriteTime, fi.fileSize, fi.id, fi.symlinkInfo != nullptr));
+ output_.addSubFile(fi.itemName, FileAttributes(fi.modTime, fi.fileSize, fi.fileId, fi.symlinkInfo != nullptr));
cfg.acb_.incItemsScanned(); //add 1 element to the progress indicator
}
@@ -419,7 +419,7 @@ DirCallback::HandleLink DirCallback::onSymlink(const SymlinkInfo& si) //throw Th
case SymLinkHandling::DIRECT:
if (cfg.filter_->passFileFilter(linkRelPath)) //always use file filter: Link type may not be "stable" on Linux!
{
- output_.addSubLink(si.itemName, LinkDescriptor(si.lastWriteTime));
+ output_.addSubLink(si.itemName, LinkAttributes(si.modTime));
cfg.acb_.incItemsScanned(); //add 1 element to the progress indicator
}
return LINK_SKIP;
diff --git a/FreeFileSync/Source/lib/parse_plural.h b/FreeFileSync/Source/lib/parse_plural.h
index 66b810a3..0f7ba186 100755
--- a/FreeFileSync/Source/lib/parse_plural.h
+++ b/FreeFileSync/Source/lib/parse_plural.h
@@ -30,10 +30,10 @@ class PluralForm
{
public:
PluralForm(const std::string& stream); //throw ParsingError
- int getForm(int64_t n) const { n_ = std::abs(n) ; return static_cast<int>(expr->eval()); }
+ int getForm(int64_t n) const { n_ = std::abs(n) ; return static_cast<int>(expr_->eval()); }
private:
- std::shared_ptr<Expr<int64_t>> expr;
+ std::shared_ptr<Expr<int64_t>> expr_;
mutable int64_t n_ = 0;
};
@@ -46,9 +46,9 @@ class PluralFormInfo
public:
PluralFormInfo(const std::string& definition, int pluralCount); //throw InvalidPluralForm
- int getCount() const { return static_cast<int>(forms.size()); }
- bool isSingleNumberForm(int index) const { return 0 <= index && index < static_cast<int>(forms.size()) ? forms[index].count == 1 : false; }
- int getFirstNumber (int index) const { return 0 <= index && index < static_cast<int>(forms.size()) ? forms[index].firstNumber : -1; }
+ int getCount() const { return static_cast<int>(forms_.size()); }
+ bool isSingleNumberForm(int index) const { return 0 <= index && index < static_cast<int>(forms_.size()) ? forms_[index].count == 1 : false; }
+ int getFirstNumber (int index) const { return 0 <= index && index < static_cast<int>(forms_.size()) ? forms_[index].firstNumber : -1; }
private:
struct FormInfo
@@ -56,7 +56,7 @@ private:
int count = 0;
int firstNumber = 0; //which maps to the plural form index position
};
- std::vector<FormInfo> forms;
+ std::vector<FormInfo> forms_;
};
@@ -205,65 +205,62 @@ struct Token
class Scanner
{
public:
- Scanner(const std::string& stream) : stream_(stream), pos(stream_.begin()) {}
+ Scanner(const std::string& stream) : stream_(stream), pos_(stream_.begin()) {}
Token nextToken()
{
//skip whitespace
- pos = std::find_if(pos, stream_.end(), [](char c) { return !zen::isWhiteSpace(c); });
+ pos_ = std::find_if(pos_, stream_.end(), [](char c) { return !zen::isWhiteSpace(c); });
- if (pos == stream_.end())
+ if (pos_ == stream_.end())
return Token::TK_END;
- for (const auto& item : tokens)
+ for (const auto& item : tokens_)
if (startsWith(item.first))
{
- pos += item.first.size();
+ pos_ += item.first.size();
return Token(item.second);
}
- auto digitEnd = std::find_if(pos, stream_.end(), [](char c) { return !zen::isDigit(c); });
+ auto digitEnd = std::find_if(pos_, stream_.end(), [](char c) { return !zen::isDigit(c); });
+ if (pos_ == digitEnd)
+ throw ParsingError(); //unknown token
- if (digitEnd != pos)
- {
- auto number = zen::stringTo<int64_t>(std::string(pos, digitEnd));
- pos = digitEnd;
- return number;
- }
-
- throw ParsingError(); //unknown token
+ auto number = zen::stringTo<int64_t>(std::string(pos_, digitEnd));
+ pos_ = digitEnd;
+ return number;
}
private:
bool startsWith(const std::string& prefix) const
{
- if (stream_.end() - pos < static_cast<ptrdiff_t>(prefix.size()))
+ if (stream_.end() - pos_ < static_cast<ptrdiff_t>(prefix.size()))
return false;
- return std::equal(prefix.begin(), prefix.end(), pos);
+ return std::equal(prefix.begin(), prefix.end(), pos_);
}
using TokenList = std::vector<std::pair<std::string, Token::Type>>;
- const TokenList tokens
+ const TokenList tokens_
{
- { "?", Token::TK_TERNARY_QUEST },
- { ":", Token::TK_TERNARY_COLON },
+ { "?", Token::TK_TERNARY_QUEST },
+ { ":", Token::TK_TERNARY_COLON },
{ "||", Token::TK_OR },
{ "&&", Token::TK_AND },
{ "==", Token::TK_EQUAL },
{ "!=", Token::TK_NOT_EQUAL },
{ "<=", Token::TK_LESS_EQUAL },
- { "<", Token::TK_LESS },
+ { "<", Token::TK_LESS },
{ ">=", Token::TK_GREATER_EQUAL },
- { ">", Token::TK_GREATER },
- { "%", Token::TK_MODULUS },
- { "n", Token::TK_VARIABLE_N },
- { "N", Token::TK_VARIABLE_N },
- { "(", Token::TK_BRACKET_LEFT },
- { ")", Token::TK_BRACKET_RIGHT },
+ { ">", Token::TK_GREATER },
+ { "%", Token::TK_MODULUS },
+ { "n", Token::TK_VARIABLE_N },
+ { "N", Token::TK_VARIABLE_N },
+ { "(", Token::TK_BRACKET_LEFT },
+ { ")", Token::TK_BRACKET_RIGHT },
};
const std::string stream_;
- std::string::const_iterator pos;
+ std::string::const_iterator pos_;
};
//-------------------------------------------------------------------------------
@@ -441,7 +438,7 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) /
if (pluralCount < 1)
throw InvalidPluralForm();
- forms.resize(pluralCount);
+ forms_.resize(pluralCount);
try
{
parse_plural::PluralForm pf(definition); //throw parse_plural::ParsingError
@@ -451,12 +448,12 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) /
//=> 1000 iterations should be fast enough and still detect all "single number forms"
for (int j = 0; j < 1000; ++j)
{
- int form = pf.getForm(j);
- if (0 <= form && form < static_cast<int>(forms.size()))
+ const int form = pf.getForm(j);
+ if (0 <= form && form < static_cast<int>(forms_.size()))
{
- if (forms[form].count == 0)
- forms[form].firstNumber = j;
- ++forms[form].count;
+ if (forms_[form].count == 0)
+ forms_[form].firstNumber = j;
+ ++forms_[form].count;
}
else
throw InvalidPluralForm();
@@ -468,13 +465,13 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) /
}
//ensure each form is used at least once:
- if (!std::all_of(forms.begin(), forms.end(), [](const FormInfo& fi) { return fi.count >= 1; }))
+ if (!std::all_of(forms_.begin(), forms_.end(), [](const FormInfo& fi) { return fi.count >= 1; }))
throw InvalidPluralForm();
}
inline
-PluralForm::PluralForm(const std::string& stream) : expr(implementation::Parser(stream, n_).parse()) {} //throw ParsingError
+PluralForm::PluralForm(const std::string& stream) : expr_(implementation::Parser(stream, n_).parse()) {} //throw ParsingError
}
#endif //PARSE_PLURAL_H_180465845670839576
diff --git a/FreeFileSync/Source/lib/process_xml.cpp b/FreeFileSync/Source/lib/process_xml.cpp
index 80668646..41ea062a 100755
--- a/FreeFileSync/Source/lib/process_xml.cpp
+++ b/FreeFileSync/Source/lib/process_xml.cpp
@@ -1032,6 +1032,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config, int formatVer)
inOpt["WarnSignificantDifference" ].attribute("Enabled", config.optDialogs.warnSignificantDifference);
inOpt["WarnRecycleBinNotAvailable" ].attribute("Enabled", config.optDialogs.warnRecyclerMissing);
inOpt["WarnInputFieldEmpty" ].attribute("Enabled", config.optDialogs.warnInputFieldEmpty);
+ inOpt["WarnModificationTimeError" ].attribute("Enabled", config.optDialogs.warnModificationTimeError);
inOpt["WarnDatabaseError" ].attribute("Enabled", config.optDialogs.warnDatabaseError);
inOpt["WarnDependentFolderPair" ].attribute("Enabled", config.optDialogs.warnDependentFolderPair);
inOpt["WarnDependentBaseFolders" ].attribute("Enabled", config.optDialogs.warnDependentBaseFolders);
@@ -1469,6 +1470,7 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out)
outOpt["WarnSignificantDifference" ].attribute("Enabled", config.optDialogs.warnSignificantDifference);
outOpt["WarnRecycleBinNotAvailable" ].attribute("Enabled", config.optDialogs.warnRecyclerMissing);
outOpt["WarnInputFieldEmpty" ].attribute("Enabled", config.optDialogs.warnInputFieldEmpty);
+ outOpt["WarnModificationTimeError" ].attribute("Enabled", config.optDialogs.warnModificationTimeError);
outOpt["WarnDatabaseError" ].attribute("Enabled", config.optDialogs.warnDatabaseError);
outOpt["WarnDependentFolderPair" ].attribute("Enabled", config.optDialogs.warnDependentFolderPair);
outOpt["WarnDependentBaseFolders" ].attribute("Enabled", config.optDialogs.warnDependentBaseFolders);
diff --git a/FreeFileSync/Source/lib/process_xml.h b/FreeFileSync/Source/lib/process_xml.h
index e2772fb9..7a772d11 100755
--- a/FreeFileSync/Source/lib/process_xml.h
+++ b/FreeFileSync/Source/lib/process_xml.h
@@ -81,6 +81,7 @@ struct OptionalDialogs
bool warnSignificantDifference = true;
bool warnNotEnoughDiskSpace = true;
bool warnUnresolvedConflicts = true;
+ bool warnModificationTimeError = true;
bool warnDatabaseError = true;
bool warnRecyclerMissing = true;
bool warnInputFieldEmpty = true;
diff --git a/FreeFileSync/Source/lib/status_handler.h b/FreeFileSync/Source/lib/status_handler.h
index 8e1e28c7..6e53a1e1 100755
--- a/FreeFileSync/Source/lib/status_handler.h
+++ b/FreeFileSync/Source/lib/status_handler.h
@@ -53,7 +53,8 @@ struct Statistics
class StatusHandler : public ProcessCallback, public AbortCallback, public Statistics
{
public:
- StatusHandler() : numbersCurrent_(4), //init with phase count
+ StatusHandler() :
+ numbersCurrent_(4), //init with phase count
numbersTotal_ (4) {} //
protected:
@@ -78,13 +79,19 @@ protected:
forceUiRefresh();
}
- void reportStatus(const std::wstring& text) override
+ void reportStatus(const std::wstring& text) override //throw X
{
//assert(!text.empty()); -> possible, start of parallel scan
if (!abortRequested) statusText_ = text;
- requestUiRefresh(); /*throw X */
+ requestUiRefresh(); //throw X
+ }
+ void reportInfo(const std::wstring& text) override //throw X
+ {
+ assert(!text.empty());
+ if (!abortRequested) statusText_ = text;
+ requestUiRefresh(); //throw X
+ //log text in derived class
}
- void reportInfo(const std::wstring& text) override { assert(!text.empty()); if (!abortRequested) statusText_ = text; requestUiRefresh(); /*throw X */ } //log text in derived class
//implement AbortCallback
void requestAbortion() override
diff --git a/FreeFileSync/Source/lib/versioning.cpp b/FreeFileSync/Source/lib/versioning.cpp
index 3074d979..6dad7433 100755
--- a/FreeFileSync/Source/lib/versioning.cpp
+++ b/FreeFileSync/Source/lib/versioning.cpp
@@ -4,6 +4,7 @@
using namespace zen;
using AFS = AbstractFileSystem;
+
namespace
{
inline
@@ -172,28 +173,31 @@ struct FlatTraverserCallback: public AFS::TraverserCallback
{
FlatTraverserCallback(const AbstractPath& folderPath) : folderPath_(folderPath) {}
- const std::vector<Zstring>& refFileNames () const { return fileNames_; }
- const std::vector<Zstring>& refFolderNames () const { return folderNames_; }
- const std::vector<Zstring>& refSymlinkNames() const { return symlinkNames_; }
+ const std::vector<FileInfo>& refFiles () const { return files_; }
+ const std::vector<FolderInfo>& refFolders () const { return folders_; }
+ const std::vector<SymlinkInfo>& refSymlinks() const { return symlinks_; }
private:
- void onFile (const FileInfo& fi) override { fileNames_ .push_back(fi.itemName); }
- std::unique_ptr<TraverserCallback> onFolder (const FolderInfo& fi) override { folderNames_ .push_back(fi.itemName); return nullptr; }
- HandleLink onSymlink(const SymlinkInfo& si) override { symlinkNames_.push_back(si.itemName); return TraverserCallback::LINK_SKIP; }
+ void onFile (const FileInfo& fi) override { files_ .push_back(fi); }
+ std::unique_ptr<TraverserCallback> onFolder (const FolderInfo& fi) override { folders_ .push_back(fi); return nullptr; }
+ HandleLink onSymlink(const SymlinkInfo& si) override { symlinks_.push_back(si); return TraverserCallback::LINK_SKIP; }
HandleError reportDirError (const std::wstring& msg, size_t retryNumber) override { throw FileError(msg); }
HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zstring& itemName) override { throw FileError(msg); }
const AbstractPath folderPath_;
- std::vector<Zstring> fileNames_;
- std::vector<Zstring> folderNames_;
- std::vector<Zstring> symlinkNames_;
+ std::vector<FileInfo> files_;
+ std::vector<FolderInfo> folders_;
+ std::vector<SymlinkInfo> symlinks_;
};
}
-bool FileVersioner::revisionFile(const AbstractPath& filePath, const Zstring& relativePath, const IOCallback& notifyUnbufferedIO) //throw FileError
+bool FileVersioner::revisionFile(const FileDescriptor& fileDescr, const Zstring& relativePath, const IOCallback& notifyUnbufferedIO) //throw FileError
{
+ const AbstractPath& filePath = fileDescr.path;
+ const AFS::StreamAttributes fileAttr{ fileDescr.attr.modTime, fileDescr.attr.fileSize, fileDescr.attr.fileId };
+
if (Opt<AFS::ItemType> type = AFS::getItemTypeIfExists(filePath)) //throw FileError
{
const AbstractPath targetPath = generateVersionedPath(relativePath);
@@ -203,8 +207,10 @@ bool FileVersioner::revisionFile(const AbstractPath& filePath, const Zstring& re
else
moveExistingItemToVersioning(filePath, targetPath, [&] //throw FileError
{
- AFS::copyFileTransactional(filePath, targetPath, //throw FileError, ErrorFileLocked
- false /*copyFilePermissions*/, true /*transactionalCopy*/, nullptr /*onDeleteTargetFile*/, notifyUnbufferedIO);
+ AFS::copyFileTransactional(filePath, fileAttr, //throw FileError, ErrorFileLocked
+ targetPath,
+ false /*copyFilePermissions*/, true /*transactionalCopy*/, nullptr /*onDeleteTargetFile*/, notifyUnbufferedIO);
+ //result.errorModTime? => irrelevant for versioning!
});
return true;
}
@@ -261,25 +267,27 @@ void FileVersioner::revisionFolderImpl(const AbstractPath& folderPath, const Zst
const Zstring relPathPf = appendSeparator(relativePath);
- for (const Zstring& fileName : ft.refFileNames())
+ for (const auto& fileInfo: ft.refFiles())
{
- const AbstractPath sourcePath = AFS::appendRelPath(folderPath, fileName);
- const AbstractPath targetPath = generateVersionedPath(relPathPf + fileName);
+ const AbstractPath sourcePath = AFS::appendRelPath(folderPath, fileInfo.itemName);
+ const AbstractPath targetPath = generateVersionedPath(relPathPf + fileInfo.itemName);
+ const AFS::StreamAttributes sourceAttr{ fileInfo.modTime, fileInfo.fileSize, fileInfo.fileId };
if (onBeforeFileMove)
onBeforeFileMove(AFS::getDisplayPath(sourcePath), AFS::getDisplayPath(targetPath));
moveExistingItemToVersioning(sourcePath, targetPath, [&] //throw FileError
{
- AFS::copyFileTransactional(sourcePath, targetPath, //throw FileError, ErrorFileLocked
- false /*copyFilePermissions*/, true /*transactionalCopy*/, nullptr /*onDeleteTargetFile*/, notifyUnbufferedIO);
+ AFS::copyFileTransactional(sourcePath, sourceAttr, targetPath, //throw FileError, ErrorFileLocked
+ false /*copyFilePermissions*/, true /*transactionalCopy*/, nullptr /*onDeleteTargetFile*/, notifyUnbufferedIO);
+ //result.errorModTime? => irrelevant for versioning!
});
}
- for (const Zstring& symlinkName : ft.refSymlinkNames())
+ for (const auto& linkInfo: ft.refSymlinks())
{
- const AbstractPath sourcePath = AFS::appendRelPath(folderPath, symlinkName);
- const AbstractPath targetPath = generateVersionedPath(relPathPf + symlinkName);
+ const AbstractPath sourcePath = AFS::appendRelPath(folderPath, linkInfo.itemName);
+ const AbstractPath targetPath = generateVersionedPath(relPathPf + linkInfo.itemName);
if (onBeforeFileMove)
onBeforeFileMove(AFS::getDisplayPath(sourcePath), AFS::getDisplayPath(targetPath));
@@ -288,9 +296,9 @@ void FileVersioner::revisionFolderImpl(const AbstractPath& folderPath, const Zst
}
//move folders recursively
- for (const Zstring& folderName : ft.refFolderNames())
- revisionFolderImpl(AFS::appendRelPath(folderPath, folderName), //throw FileError
- relPathPf + folderName,
+ for (const auto& folderInfo : ft.refFolders())
+ revisionFolderImpl(AFS::appendRelPath(folderPath, folderInfo.itemName), //throw FileError
+ relPathPf + folderInfo.itemName,
onBeforeFileMove, onBeforeFolderMove, notifyUnbufferedIO);
//delete source
if (onBeforeFolderMove)
diff --git a/FreeFileSync/Source/lib/versioning.h b/FreeFileSync/Source/lib/versioning.h
index 86cf833b..2b168267 100755
--- a/FreeFileSync/Source/lib/versioning.h
+++ b/FreeFileSync/Source/lib/versioning.h
@@ -12,6 +12,7 @@
#include <zen/file_error.h>
#include "../structures.h"
#include "../fs/abstract.h"
+#include "../algorithm.h"
namespace zen
@@ -45,7 +46,7 @@ public:
throw FileError(_("Unable to create time stamp for versioning:") + L" \"" + utfTo<std::wstring>(timeStamp_) + L"\"");
}
- bool revisionFile(const AbstractPath& filePath, //throw FileError; return "false" if file is not existing
+ bool revisionFile(const FileDescriptor& fileDescr, //throw FileError; return "false" if file is not existing
const Zstring& relativePath,
//called frequently if move has to revert to copy + delete => see zen::copyFile for limitations when throwing exceptions!
const IOCallback& notifyUnbufferedIO); //may be nullptr
diff --git a/FreeFileSync/Source/process_callback.h b/FreeFileSync/Source/process_callback.h
index e394c730..b47c2a89 100755
--- a/FreeFileSync/Source/process_callback.h
+++ b/FreeFileSync/Source/process_callback.h
@@ -31,7 +31,7 @@ struct ProcessCallback
PHASE_COMPARING_CONTENT,
PHASE_SYNCHRONIZING
};
- virtual void initNewPhase(int itemsTotal, int64_t bytesTotal, Phase phaseId) = 0; //throw ?; informs about the estimated amount of data that will be processed in this phase
+ virtual void initNewPhase(int itemsTotal, int64_t bytesTotal, Phase phaseId) = 0; //throw X; informs about the estimated amount of data that will be processed in this phase
//note: this one must NOT throw in order to properly allow undoing setting of statistics!
//it is in general paired with a call to requestUiRefresh() to compensate!
@@ -51,16 +51,16 @@ struct ProcessCallback
*/
//opportunity to abort must be implemented in a frequently executed method like requestUiRefresh()
- virtual void requestUiRefresh() = 0; //throw ?
- virtual void forceUiRefresh () = 0; //throw ? - called before starting long running tasks which don't update regularly
+ virtual void requestUiRefresh() = 0; //throw X
+ virtual void forceUiRefresh () = 0; //throw X - called before starting long running tasks which don't update regularly
//called periodically after data was processed: expected(!) to request GUI update
- virtual void reportStatus(const std::wstring& text) = 0; //throw ?; UI info only, should not be logged!
+ virtual void reportStatus(const std::wstring& text) = 0; //throw X; UI info only, should not be logged!
//called periodically after data was processed: expected(!) to request GUI update
- virtual void reportInfo(const std::wstring& text) = 0; //throw ?
+ virtual void reportInfo(const std::wstring& text) = 0; //throw X
- virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive) = 0; //throw ?
+ virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive) = 0; //throw X
//error handling:
enum Response
@@ -68,8 +68,8 @@ struct ProcessCallback
IGNORE_ERROR = 10,
RETRY
};
- virtual Response reportError (const std::wstring& errorMessage, size_t retryNumber) = 0; //throw ?; recoverable error situation
- virtual void reportFatalError(const std::wstring& errorMessage) = 0; //throw ?; non-recoverable error situation
+ virtual Response reportError (const std::wstring& errorMessage, size_t retryNumber) = 0; //throw X; recoverable error situation
+ virtual void reportFatalError(const std::wstring& errorMessage) = 0; //throw X; non-recoverable error situation
virtual void abortProcessNow() = 0; //will throw an exception => don't call while in a C GUI callstack
};
diff --git a/FreeFileSync/Source/structures.cpp b/FreeFileSync/Source/structures.cpp
index 7ea03132..04e46a4d 100755
--- a/FreeFileSync/Source/structures.cpp
+++ b/FreeFileSync/Source/structures.cpp
@@ -230,13 +230,13 @@ std::wstring zen::getSymbol(SyncOperation op)
return L"delete <-";
case SO_DELETE_RIGHT:
return L"delete ->";
- case SO_MOVE_LEFT_SOURCE:
+ case SO_MOVE_LEFT_FROM:
return L"move from <-";
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_TO:
return L"move to <-";
- case SO_MOVE_RIGHT_SOURCE:
+ case SO_MOVE_RIGHT_FROM:
return L"move from ->";
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_TO:
return L"move to ->";
case SO_OVERWRITE_LEFT:
case SO_COPY_METADATA_TO_LEFT:
diff --git a/FreeFileSync/Source/structures.h b/FreeFileSync/Source/structures.h
index 2c68993f..562b4902 100755
--- a/FreeFileSync/Source/structures.h
+++ b/FreeFileSync/Source/structures.h
@@ -83,11 +83,11 @@ enum SyncOperation
SO_DELETE_LEFT,
SO_DELETE_RIGHT,
- SO_MOVE_LEFT_SOURCE, //SO_DELETE_LEFT - optimization!
- SO_MOVE_LEFT_TARGET, //SO_CREATE_NEW_LEFT
+ SO_MOVE_LEFT_FROM, //SO_DELETE_LEFT - optimization!
+ SO_MOVE_LEFT_TO, //SO_CREATE_NEW_LEFT
- SO_MOVE_RIGHT_SOURCE, //SO_DELETE_RIGHT - optimization!
- SO_MOVE_RIGHT_TARGET, //SO_CREATE_NEW_RIGHT
+ SO_MOVE_RIGHT_FROM, //SO_DELETE_RIGHT - optimization!
+ SO_MOVE_RIGHT_TO, //SO_CREATE_NEW_RIGHT
SO_OVERWRITE_LEFT,
SO_OVERWRITE_RIGHT,
diff --git a/FreeFileSync/Source/synchronization.cpp b/FreeFileSync/Source/synchronization.cpp
index dccaceb9..d2c1a9db 100755
--- a/FreeFileSync/Source/synchronization.cpp
+++ b/FreeFileSync/Source/synchronization.cpp
@@ -95,17 +95,17 @@ void SyncStatistics::processFile(const FilePair& file)
physicalDeleteRight_ = true;
break;
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_TO:
++updateLeft_;
//physicalDeleteLeft_ ? -> usually, no; except when falling back to "copy + delete"
break;
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_TO:
++updateRight_;
break;
- case SO_MOVE_LEFT_SOURCE: //ignore; already counted
- case SO_MOVE_RIGHT_SOURCE: //
+ case SO_MOVE_LEFT_FROM: //ignore; already counted
+ case SO_MOVE_RIGHT_FROM: //
break;
case SO_OVERWRITE_LEFT:
@@ -178,10 +178,10 @@ void SyncStatistics::processLink(const SymlinkPair& link)
conflictMsgs_.push_back({ link.getPairRelativePath(), link.getSyncOpConflict() });
break;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
assert(false);
case SO_DO_NOTHING:
case SO_EQUAL:
@@ -227,10 +227,10 @@ void SyncStatistics::processFolder(const FolderPair& folder)
++updateRight_;
break;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
assert(false);
case SO_DO_NOTHING:
case SO_EQUAL:
@@ -278,16 +278,16 @@ Opt<SelectedSide> getTargetDirection(SyncOperation syncOp)
case SO_DELETE_LEFT:
case SO_OVERWRITE_LEFT:
case SO_COPY_METADATA_TO_LEFT:
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
return LEFT_SIDE;
case SO_CREATE_NEW_RIGHT:
case SO_DELETE_RIGHT:
case SO_OVERWRITE_RIGHT:
case SO_COPY_METADATA_TO_RIGHT:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
return RIGHT_SIDE;
case SO_DO_NOTHING:
@@ -347,9 +347,9 @@ public:
//clean-up temporary directory (recycle bin optimization)
void tryCleanup(bool allowUserCallback); //throw FileError; throw X -> call this in non-exceptional coding, i.e. somewhere after sync!
- template <class Function> void removeFileWithCallback (const AbstractPath& filePath, const Zstring& relativePath, Function onNotifyItemDeletion, const IOCallback& notifyUnbufferedIO); //
- template <class Function> void removeDirWithCallback (const AbstractPath& dirPath, const Zstring& relativePath, Function onNotifyItemDeletion, const IOCallback& notifyUnbufferedIO); //throw FileError
- template <class Function> void removeLinkWithCallback (const AbstractPath& linkPath, const Zstring& relativePath, Function onNotifyItemDeletion); //
+ template <class Function> void removeFileWithCallback (const FileDescriptor& fileDescr, const Zstring& relativePath, Function onNotifyItemDeletion, const IOCallback& notifyUnbufferedIO); //
+ template <class Function> void removeDirWithCallback (const AbstractPath& dirPath, const Zstring& relativePath, Function onNotifyItemDeletion, const IOCallback& notifyUnbufferedIO); //throw FileError
+ template <class Function> void removeLinkWithCallback (const AbstractPath& linkPath, const Zstring& relativePath, Function onNotifyItemDeletion); //
const std::wstring& getTxtRemovingFile () const { return txtRemovingFile_; } //
const std::wstring& getTxtRemovingFolder () const { return txtRemovingFolder_; } //buffered status texts
@@ -523,7 +523,7 @@ void DeletionHandling::removeDirWithCallback(const AbstractPath& folderPath,
template <class Function>
-void DeletionHandling::removeFileWithCallback(const AbstractPath& filePath,
+void DeletionHandling::removeFileWithCallback(const FileDescriptor& fileDescr,
const Zstring& relativePath,
Function onNotifyItemDeletion,
const IOCallback& notifyUnbufferedIO) //throw FileError
@@ -531,18 +531,18 @@ void DeletionHandling::removeFileWithCallback(const AbstractPath& filePath,
bool deleted = false;
if (endsWith(relativePath, AFS::TEMP_FILE_ENDING)) //special rule for .ffs_tmp files: always delete permanently!
- deleted = AFS::removeFileIfExists(filePath); //throw FileError
+ deleted = AFS::removeFileIfExists(fileDescr.path); //throw FileError
else
switch (deletionPolicy_)
{
case DeletionPolicy::PERMANENT:
- deleted = AFS::removeFileIfExists(filePath); //throw FileError
+ deleted = AFS::removeFileIfExists(fileDescr.path); //throw FileError
break;
case DeletionPolicy::RECYCLER:
- deleted = getOrCreateRecyclerSession().recycleItem(filePath, relativePath); //throw FileError
+ deleted = getOrCreateRecyclerSession().recycleItem(fileDescr.path, relativePath); //throw FileError
break;
case DeletionPolicy::VERSIONING:
- deleted = getOrCreateVersioner().revisionFile(filePath, relativePath, notifyUnbufferedIO); //throw FileError
+ deleted = getOrCreateVersioner().revisionFile(fileDescr, relativePath, notifyUnbufferedIO); //throw FileError
break;
}
if (deleted)
@@ -636,10 +636,10 @@ private:
case SO_UNRESOLVED_CONFLICT:
case SO_COPY_METADATA_TO_LEFT:
case SO_COPY_METADATA_TO_RIGHT:
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
break;
}
@@ -664,9 +664,11 @@ public:
bool verifyCopiedFiles,
bool copyFilePermissions,
bool failSafeFileCopy,
+ std::vector<FileError>& errorsModTime,
DeletionHandling& delHandlingLeft,
DeletionHandling& delHandlingRight) :
procCallback_(procCallback),
+ errorsModTime_(errorsModTime),
delHandlingLeft_(delHandlingLeft),
delHandlingRight_(delHandlingRight),
verifyCopiedFiles_(verifyCopiedFiles),
@@ -720,15 +722,17 @@ private:
procCallback_.reportInfo(replaceCpy(replaceCpy(rawText, L"%x", L"\n" + fmtPath(displayPath1)), L"%y", L"\n" + fmtPath(displayPath2)));
}
- AFS::FileAttribAfterCopy copyFileWithCallback(const AbstractPath& sourcePath,
- const AbstractPath& targetPath,
- const std::function<void()>& onDeleteTargetFile,
- const IOCallback& notifyUnbufferedIO) const; //throw FileError
+ AFS::FileCopyResult copyFileWithCallback(const FileDescriptor& sourceDescr, //throw FileError
+ const AbstractPath& targetPath,
+ const std::function<void()>& onDeleteTargetFile,
+ const IOCallback& notifyUnbufferedIO) const;
template <SelectedSide side>
DeletionHandling& getDelHandling();
ProcessCallback& procCallback_;
+ std::vector<FileError>& errorsModTime_;
+
DeletionHandling& delHandlingLeft_;
DeletionHandling& delHandlingRight_;
@@ -829,12 +833,7 @@ void SynchronizeFolderPair::prepare2StepMove(FilePair& sourceObj,
//TODO: prepare2StepMove: consider ErrorDifferentVolume! e.g. symlink aliasing!
//update file hierarchy
- const FileDescriptor descrSource(sourceObj.getLastWriteTime <side>(),
- sourceObj.getFileSize <side>(),
- sourceObj.getFileId <side>(),
- sourceObj.isFollowedSymlink<side>());
-
- FilePair& tempFile = sourceObj.base().addSubFile<side>(afterLast(sourceRelPathTmp, FILE_NAME_SEPARATOR, IF_MISSING_RETURN_ALL), descrSource);
+ FilePair& tempFile = sourceObj.base().addSubFile<side>(afterLast(sourceRelPathTmp, FILE_NAME_SEPARATOR, IF_MISSING_RETURN_ALL), sourceObj.getAttributes<side>());
static_assert(IsSameType<FixedList<FilePair>, ContainerObject::FileList>::value,
"ATTENTION: we're adding to the file list WHILE looping over it! This is only working because FixedList iterators are not invalidated by insertion!");
sourceObj.removeObject<side>(); //remove only *after* evaluating "sourceObj, side"!
@@ -879,8 +878,8 @@ template <SelectedSide side>
void SynchronizeFolderPair::manageFileMove(FilePair& sourceFile,
FilePair& targetFile) //throw FileError
{
- assert((sourceFile.getSyncOperation() == SO_MOVE_LEFT_SOURCE && targetFile.getSyncOperation() == SO_MOVE_LEFT_TARGET && side == LEFT_SIDE) ||
- (sourceFile.getSyncOperation() == SO_MOVE_RIGHT_SOURCE && targetFile.getSyncOperation() == SO_MOVE_RIGHT_TARGET && side == RIGHT_SIDE));
+ assert((sourceFile.getSyncOperation() == SO_MOVE_LEFT_FROM && targetFile.getSyncOperation() == SO_MOVE_LEFT_TO && side == LEFT_SIDE) ||
+ (sourceFile.getSyncOperation() == SO_MOVE_RIGHT_FROM && targetFile.getSyncOperation() == SO_MOVE_RIGHT_TO && side == RIGHT_SIDE));
const bool sourceWillBeDeleted = [&]() -> bool
{
@@ -891,10 +890,10 @@ void SynchronizeFolderPair::manageFileMove(FilePair& sourceFile,
case SO_DELETE_LEFT:
case SO_DELETE_RIGHT:
return true; //we need to do something about it
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
case SO_OVERWRITE_LEFT:
case SO_OVERWRITE_RIGHT:
case SO_CREATE_NEW_LEFT:
@@ -925,7 +924,7 @@ void SynchronizeFolderPair::manageFileMove(FilePair& sourceFile,
//finally start move! this should work now:
synchronizeFile(targetFile); //throw FileError
- //SynchronizeFolderPair::synchronizeFileInt() is *not* expecting SO_MOVE_LEFT_SOURCE/SO_MOVE_RIGHT_SOURCE => start move from targetFile, not sourceFile!
+ //SynchronizeFolderPair::synchronizeFileInt() is *not* expecting SO_MOVE_LEFT_FROM/SO_MOVE_RIGHT_FROM => start move from targetFile, not sourceFile!
}
//else: sourceFile will not be deleted, and is not standing in the way => delay to second pass
//note: this case may include new "move sources" from two-step sub-routine!!!
@@ -940,8 +939,8 @@ void SynchronizeFolderPair::runZeroPass(ContainerObject& hierObj)
const SyncOperation syncOp = file.getSyncOperation();
switch (syncOp) //evaluate comparison result and sync direction
{
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
if (FilePair* targetObj = dynamic_cast<FilePair*>(FileSystemObject::retrieve(file.getMoveRef())))
{
FilePair* sourceObj = &file;
@@ -949,7 +948,7 @@ void SynchronizeFolderPair::runZeroPass(ContainerObject& hierObj)
zen::Opt<std::wstring> errMsg = tryReportingError([&]
{
- if (syncOp == SO_MOVE_LEFT_SOURCE)
+ if (syncOp == SO_MOVE_LEFT_FROM)
this->manageFileMove<LEFT_SIDE>(*sourceObj, *targetObj); //throw FileError
else
this->manageFileMove<RIGHT_SIDE>(*sourceObj, *targetObj); //
@@ -965,7 +964,7 @@ void SynchronizeFolderPair::runZeroPass(ContainerObject& hierObj)
SyncStatistics statSrc(*sourceObj);
SyncStatistics statTrg(*targetObj);
return std::make_pair(getCUD(statSrc) + getCUD(statTrg),
- statSrc.getBytesToProcess() + statTrg.getBytesToProcess());
+ statSrc.getBytesToProcess() + statTrg.getBytesToProcess());
};
const auto statBefore = getStats();
@@ -979,8 +978,8 @@ void SynchronizeFolderPair::runZeroPass(ContainerObject& hierObj)
else assert(false);
break;
- case SO_MOVE_LEFT_TARGET: //it's enough to try each move-pair *once*
- case SO_MOVE_RIGHT_TARGET: //
+ case SO_MOVE_LEFT_TO: //it's enough to try each move-pair *once*
+ case SO_MOVE_RIGHT_TO: //
case SO_DELETE_LEFT:
case SO_DELETE_RIGHT:
case SO_OVERWRITE_LEFT:
@@ -1021,11 +1020,11 @@ SynchronizeFolderPair::PassNo SynchronizeFolderPair::getPass(const FilePair& fil
case SO_OVERWRITE_RIGHT:
return file.getFileSize<LEFT_SIDE>() < file.getFileSize<RIGHT_SIDE>() ? PASS_ONE : PASS_TWO;
- case SO_MOVE_LEFT_SOURCE: //
- case SO_MOVE_RIGHT_SOURCE: // [!]
+ case SO_MOVE_LEFT_FROM: //
+ case SO_MOVE_RIGHT_FROM: // [!]
return PASS_NEVER;
- case SO_MOVE_LEFT_TARGET: //
- case SO_MOVE_RIGHT_TARGET: //make sure 2-step move is processed in second pass, after move *target* parent directory was created!
+ case SO_MOVE_LEFT_TO: //
+ case SO_MOVE_RIGHT_TO: //make sure 2-step move is processed in second pass, after move *target* parent directory was created!
return PASS_TWO;
case SO_CREATE_NEW_LEFT:
@@ -1061,10 +1060,10 @@ SynchronizeFolderPair::PassNo SynchronizeFolderPair::getPass(const SymlinkPair&
case SO_COPY_METADATA_TO_RIGHT:
return PASS_TWO;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
assert(false);
case SO_DO_NOTHING:
case SO_EQUAL:
@@ -1093,10 +1092,10 @@ SynchronizeFolderPair::PassNo SynchronizeFolderPair::getPass(const FolderPair& f
case SO_COPY_METADATA_TO_RIGHT:
return PASS_TWO;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
assert(false);
case SO_DO_NOTHING:
case SO_EQUAL:
@@ -1171,18 +1170,21 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
{
auto notifyUnbufferedIO = [&](int64_t bytesDelta) { statReporter.reportDelta(0, bytesDelta); };
- const AFS::FileAttribAfterCopy newAttr = copyFileWithCallback(file.getAbstractPath<sideSrc>(),
- targetPath,
- nullptr, //no target to delete
- notifyUnbufferedIO); //throw FileError
+ const AFS::FileCopyResult result = copyFileWithCallback({ file.getAbstractPath<sideSrc>(), file.getAttributes<sideSrc>() },
+ targetPath,
+ nullptr, //no target to delete
+ notifyUnbufferedIO); //throw FileError
+ if (result.errorModTime)
+ errorsModTime_.push_back(*result.errorModTime); //show all warnings later as a single message
+
statReporter.reportDelta(1, 0);
//update FilePair
- file.setSyncedTo<sideTrg>(file.getItemName<sideSrc>(), newAttr.fileSize,
- newAttr.modificationTime, //target time set from source
- newAttr.modificationTime,
- newAttr.targetFileId,
- newAttr.sourceFileId,
+ file.setSyncedTo<sideTrg>(file.getItemName<sideSrc>(), result.fileSize,
+ result.modTime, //target time set from source
+ result.modTime,
+ result.targetFileId,
+ result.sourceFileId,
false, file.isFollowedSymlink<sideSrc>());
}
catch (FileError&)
@@ -1208,44 +1210,45 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
auto onNotifyItemDeletion = [&] { statReporter.reportDelta(1, 0); };
auto notifyUnbufferedIO = [&](int64_t bytesDelta) { statReporter.reportDelta(0, bytesDelta); };
- getDelHandling<sideTrg>().removeFileWithCallback(file.getAbstractPath<sideTrg>(), file.getPairRelativePath(), onNotifyItemDeletion, notifyUnbufferedIO); //throw FileError
+ getDelHandling<sideTrg>().removeFileWithCallback({ file.getAbstractPath<sideTrg>(), file.getAttributes<sideTrg>() },
+ file.getPairRelativePath(), onNotifyItemDeletion, notifyUnbufferedIO); //throw FileError
file.removeObject<sideTrg>(); //update FilePair
}
break;
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
- if (FilePair* moveSource = dynamic_cast<FilePair*>(FileSystemObject::retrieve(file.getMoveRef())))
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
+ if (FilePair* moveFrom = dynamic_cast<FilePair*>(FileSystemObject::retrieve(file.getMoveRef())))
{
- FilePair* moveTarget = &file;
+ FilePair* moveTo = &file;
- assert((moveSource->getSyncOperation() == SO_MOVE_LEFT_SOURCE && moveTarget->getSyncOperation() == SO_MOVE_LEFT_TARGET && sideTrg == LEFT_SIDE) ||
- (moveSource->getSyncOperation() == SO_MOVE_RIGHT_SOURCE && moveTarget->getSyncOperation() == SO_MOVE_RIGHT_TARGET && sideTrg == RIGHT_SIDE));
+ assert((moveFrom->getSyncOperation() == SO_MOVE_LEFT_FROM && moveTo->getSyncOperation() == SO_MOVE_LEFT_TO && sideTrg == LEFT_SIDE) ||
+ (moveFrom->getSyncOperation() == SO_MOVE_RIGHT_FROM && moveTo->getSyncOperation() == SO_MOVE_RIGHT_TO && sideTrg == RIGHT_SIDE));
- const AbstractPath oldPath = moveSource->getAbstractPath<sideTrg>();
- const AbstractPath newPath = moveTarget->getAbstractPath<sideTrg>();
+ const AbstractPath pathFrom = moveFrom->getAbstractPath<sideTrg>();
+ const AbstractPath pathTo = moveTo ->getAbstractPath<sideTrg>();
- reportInfo(txtMovingFile, AFS::getDisplayPath(oldPath), AFS::getDisplayPath(newPath));
+ reportInfo(txtMovingFile, AFS::getDisplayPath(pathFrom), AFS::getDisplayPath(pathTo));
StatisticsReporter statReporter(1, 0, procCallback_);
//TODO: synchronizeFileInt: consider ErrorDifferentVolume! e.g. symlink aliasing!
- AFS::renameItem(oldPath, newPath); //throw FileError, (ErrorDifferentVolume)
+ AFS::renameItem(pathFrom, pathTo); //throw FileError, (ErrorDifferentVolume)
statReporter.reportDelta(1, 0);
//update FilePair
- assert(moveSource->getFileSize<sideTrg>() == moveTarget->getFileSize<sideSrc>());
- moveTarget->setSyncedTo<sideTrg>(moveTarget->getItemName<sideSrc>(), moveTarget->getFileSize<sideSrc>(),
- moveSource->getLastWriteTime<sideTrg>(), //awkward naming! moveSource is renamed on "sideTrg" side!
- moveTarget->getLastWriteTime<sideSrc>(),
- moveSource->getFileId<sideTrg>(),
- moveTarget->getFileId<sideSrc>(),
- moveSource->isFollowedSymlink<sideTrg>(),
- moveTarget->isFollowedSymlink<sideSrc>());
- moveSource->removeObject<sideTrg>(); //remove only *after* evaluating "moveSource, sideTrg"!
+ assert(moveFrom->getFileSize<sideTrg>() == moveTo->getFileSize<sideSrc>());
+ moveTo->setSyncedTo<sideTrg>(moveTo->getItemName<sideSrc>(), moveTo->getFileSize<sideSrc>(),
+ moveFrom->getLastWriteTime<sideTrg>(), //awkward naming! moveFrom is renamed on "sideTrg" side!
+ moveTo ->getLastWriteTime<sideSrc>(),
+ moveFrom->getFileId<sideTrg>(),
+ moveTo ->getFileId<sideSrc>(),
+ moveFrom->isFollowedSymlink<sideTrg>(),
+ moveTo ->isFollowedSymlink<sideSrc>());
+ moveFrom->removeObject<sideTrg>(); //remove only *after* evaluating "moveFrom, sideTrg"!
}
else (assert(false));
break;
@@ -1259,7 +1262,7 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
AbstractPath targetPathResolvedOld = file.getAbstractPath<sideTrg>(); //support change in case when syncing to case-sensitive SFTP on Windows!
AbstractPath targetPathResolvedNew = targetPathLogical;
if (file.isFollowedSymlink<sideTrg>()) //follow link when updating file rather than delete it and replace with regular file!!!
- targetPathResolvedOld = targetPathResolvedNew = AFS::getResolvedSymlinkPath(file.getAbstractPath<sideTrg>()); //throw FileError
+ targetPathResolvedOld = targetPathResolvedNew = AFS::getSymlinkResolvedPath(file.getAbstractPath<sideTrg>()); //throw FileError
reportInfo(txtOverwritingFile, AFS::getDisplayPath(targetPathResolvedOld));
@@ -1275,7 +1278,11 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
{
//reportStatus(this->getDelHandling<sideTrg>().getTxtRemovingFile(), AFS::getDisplayPath(targetPathResolvedOld)); -> superfluous/confuses user
- this->getDelHandling<sideTrg>().removeFileWithCallback(targetPathResolvedOld, file.getPairRelativePath(), [] {}, notifyUnbufferedIO); //throw FileError;
+ FileAttributes followedTargetAttr = file.getAttributes<sideTrg>();
+ followedTargetAttr.isFollowedSymlink = false;
+
+ this->getDelHandling<sideTrg>().removeFileWithCallback({ targetPathResolvedOld, followedTargetAttr},
+ file.getPairRelativePath(), [] {}, notifyUnbufferedIO); //throw FileError;
//no (logical) item count update desired - but total byte count may change, e.g. move(copy) deleted file to versioning dir
//file.removeObject<sideTrg>(); -> doesn't make sense for isFollowedSymlink(); "file, sideTrg" evaluated below!
@@ -1285,18 +1292,21 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
//=> if failSafeFileCopy_ : don't run callbacks that could throw
};
- const AFS::FileAttribAfterCopy newAttr = copyFileWithCallback(file.getAbstractPath<sideSrc>(),
- targetPathResolvedNew,
- onDeleteTargetFile,
- notifyUnbufferedIO); //throw FileError
+ const AFS::FileCopyResult result = copyFileWithCallback({ file.getAbstractPath<sideSrc>(), file.getAttributes<sideSrc>() },
+ targetPathResolvedNew,
+ onDeleteTargetFile,
+ notifyUnbufferedIO); //throw FileError
+ if (result.errorModTime)
+ errorsModTime_.push_back(*result.errorModTime); //show all warnings later as a single message
+
statReporter.reportDelta(1, 0); //we model "delete + copy" as ONE logical operation
//update FilePair
- file.setSyncedTo<sideTrg>(file.getItemName<sideSrc>(), newAttr.fileSize,
- newAttr.modificationTime, //target time set from source
- newAttr.modificationTime,
- newAttr.targetFileId,
- newAttr.sourceFileId,
+ file.setSyncedTo<sideTrg>(file.getItemName<sideSrc>(), result.fileSize,
+ result.modTime, //target time set from source
+ result.modTime,
+ result.targetFileId,
+ result.sourceFileId,
file.isFollowedSymlink<sideTrg>(),
file.isFollowedSymlink<sideSrc>());
}
@@ -1335,8 +1345,8 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& file, SyncOperation syn
}
break;
- case SO_MOVE_LEFT_SOURCE: //use SO_MOVE_LEFT_TARGET/SO_MOVE_RIGHT_TARGET to execute move:
- case SO_MOVE_RIGHT_SOURCE: //=> makes sure parent directory has been created
+ case SO_MOVE_LEFT_FROM: //use SO_MOVE_LEFT_TO/SO_MOVE_RIGHT_TO to execute move:
+ case SO_MOVE_RIGHT_FROM: //=> makes sure parent directory has been created
case SO_DO_NOTHING:
case SO_EQUAL:
case SO_UNRESOLVED_CONFLICT:
@@ -1472,10 +1482,10 @@ void SynchronizeFolderPair::synchronizeLinkInt(SymlinkPair& symlink, SyncOperati
}
break;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
case SO_DO_NOTHING:
case SO_EQUAL:
case SO_UNRESOLVED_CONFLICT:
@@ -1599,10 +1609,10 @@ void SynchronizeFolderPair::synchronizeFolderInt(FolderPair& folder, SyncOperati
}
break;
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_RIGHT_TO:
case SO_DO_NOTHING:
case SO_EQUAL:
case SO_UNRESOLVED_CONFLICT:
@@ -1645,31 +1655,34 @@ void verifyFiles(const AbstractPath& sourcePath, const AbstractPath& targetPath,
}
-AFS::FileAttribAfterCopy SynchronizeFolderPair::copyFileWithCallback(const AbstractPath& sourcePath, //throw FileError
- const AbstractPath& targetPath,
- const std::function<void()>& onDeleteTargetFile,
- const IOCallback& notifyUnbufferedIO) const //returns current attributes of source file
+AFS::FileCopyResult SynchronizeFolderPair::copyFileWithCallback(const FileDescriptor& sourceDescr, //throw FileError
+ const AbstractPath& targetPath,
+ const std::function<void()>& onDeleteTargetFile,
+ const IOCallback& notifyUnbufferedIO) const //returns current attributes of source file
{
- auto copyOperation = [this, &targetPath, &onDeleteTargetFile, &notifyUnbufferedIO](const AbstractPath& sourcePathTmp)
+ const AbstractPath& sourcePath = sourceDescr.path;
+ const AFS::StreamAttributes sourceAttr{ sourceDescr.attr.modTime, sourceDescr.attr.fileSize, sourceDescr.attr.fileId };
+
+ auto copyOperation = [this, &sourceAttr, &targetPath, &onDeleteTargetFile, &notifyUnbufferedIO](const AbstractPath& sourcePathTmp)
{
- AFS::FileAttribAfterCopy newAttr = AFS::copyFileTransactional(sourcePathTmp, targetPath, //throw FileError, ErrorFileLocked
+ const AFS::FileCopyResult result = AFS::copyFileTransactional(sourcePathTmp, sourceAttr, //throw FileError, ErrorFileLocked
+ targetPath,
copyFilePermissions_,
failSafeFileCopy_,
onDeleteTargetFile,
notifyUnbufferedIO);
-
//#################### Verification #############################
if (verifyCopiedFiles_)
{
ZEN_ON_SCOPE_FAIL(try { AFS::removeFilePlain(targetPath); }
- catch (FileError&) {}); //delete target if verification fails
+ catch (FileError&) {}); //delete target if verification fails
procCallback_.reportInfo(replaceCpy(txtVerifying, L"%x", fmtPath(AFS::getDisplayPath(targetPath))));
verifyFiles(sourcePathTmp, targetPath, [&](int64_t bytesDelta) { procCallback_.requestUiRefresh(); }); //throw FileError
}
//#################### /Verification #############################
- return newAttr;
+ return result;
};
return copyOperation(sourcePath);
@@ -1754,7 +1767,6 @@ enum class FolderPairJobType
void zen::synchronize(const TimeComp& timeStamp,
- xmlAccess::OptionalDialogs& warnings,
bool verifyCopiedFiles,
bool copyLockedFiles,
bool copyFilePermissions,
@@ -1763,6 +1775,7 @@ void zen::synchronize(const TimeComp& timeStamp,
int folderAccessTimeout,
const std::vector<FolderPairSyncCfg>& syncConfig,
FolderComparison& folderCmp,
+ xmlAccess::OptionalDialogs& warnings,
ProcessCallback& callback)
{
//PERF_START;
@@ -2056,7 +2069,7 @@ void zen::synchronize(const TimeComp& timeStamp,
if (!dependentFolders.empty())
{
- std::wstring msg = _("Some files will be synchronized as part of more than one base folder.") + L"\n" +
+ std::wstring msg = _("Some files will be synchronized as part of multiple base folders.") + L"\n" +
_("To avoid conflicts, set up exclude filters so that each updated file is considered by only one base folder.") + L"\n";
for (const AbstractPath& baseFolderPath : dependentFolders)
@@ -2087,12 +2100,13 @@ void zen::synchronize(const TimeComp& timeStamp,
msg += item.second;
}
if (!msg.empty())
- callback.reportWarning(_("The versioning folder will be synchronized as part of a base folder.") + L"\n" +
- _("You may want to exclude it from synchronization via filter.") + msg, warnings.warnVersioningFolderPartOfSync);
+ callback.reportWarning(_("The versioning folder will be synchronized because it is contained in a base folder.") + L"\n" +
+ _("The folder should be excluded from synchronization via filter.") + msg, warnings.warnVersioningFolderPartOfSync);
}
//-------------------end of basic checks------------------------------------------
+ std::vector<FileError> errorsModTime; //show all warnings as a single message
try
{
@@ -2150,7 +2164,7 @@ void zen::synchronize(const TimeComp& timeStamp,
!AFS::isNullPath(baseFolder.getAbstractPath< LEFT_SIDE>()) && //scenario: directory selected on one side only
!AFS::isNullPath(baseFolder.getAbstractPath<RIGHT_SIDE>()) && //
AFS::supportPermissionCopy(baseFolder.getAbstractPath<LEFT_SIDE>(),
- baseFolder.getAbstractPath<RIGHT_SIDE>()); //throw FileError
+ baseFolder.getAbstractPath<RIGHT_SIDE>()); //throw FileError
}, callback); //throw X?
@@ -2183,6 +2197,7 @@ void zen::synchronize(const TimeComp& timeStamp,
SynchronizeFolderPair syncFP(callback, verifyCopiedFiles, copyPermissionsFp, failSafeFileCopy,
+ errorsModTime,
delHandlerL, delHandlerR);
syncFP.startSync(baseFolder);
@@ -2204,6 +2219,24 @@ void zen::synchronize(const TimeComp& timeStamp,
}, callback); //throw X
}
}
+
+ //------------------- show warnings after end of synchronization --------------------------------------
+
+ //TODO: mod time warnings are not shown if user cancelled sync before batch-reporting the warnings: problem?
+
+ //show errors when setting modification time: warning, not an error
+ if (!errorsModTime.empty())
+ {
+ std::wstring msg;
+ for (const FileError& e : errorsModTime)
+ {
+ std::wstring singleMsg = replaceCpy(e.toString(), L"\n\n", L"\n");
+ msg += singleMsg + L"\n\n";
+ }
+ msg.resize(msg.size() - 2);
+
+ callback.reportWarning(msg, warnings.warnModificationTimeError); //throw X
+ }
}
catch (const std::exception& e)
{
diff --git a/FreeFileSync/Source/synchronization.h b/FreeFileSync/Source/synchronization.h
index 00f6862e..24232b40 100755
--- a/FreeFileSync/Source/synchronization.h
+++ b/FreeFileSync/Source/synchronization.h
@@ -95,7 +95,6 @@ std::vector<FolderPairSyncCfg> extractSyncCfg(const MainConfiguration& mainCfg);
//FFS core routine:
void synchronize(const TimeComp& timeStamp,
- xmlAccess::OptionalDialogs& warnings,
bool verifyCopiedFiles,
bool copyLockedFiles,
bool copyFilePermissions,
@@ -104,6 +103,7 @@ void synchronize(const TimeComp& timeStamp,
int folderAccessTimeout,
const std::vector<FolderPairSyncCfg>& syncConfig, //CONTRACT: syncConfig and folderCmp correspond row-wise!
FolderComparison& folderCmp, //
+ xmlAccess::OptionalDialogs& warnings,
ProcessCallback& callback);
}
diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp
index 874bae59..166b2779 100755
--- a/FreeFileSync/Source/ui/batch_status_handler.cpp
+++ b/FreeFileSync/Source/ui/batch_status_handler.cpp
@@ -53,7 +53,6 @@ std::unique_ptr<AFS::OutputStream> prepareNewLogfile(const AbstractPath& logFold
return AFS::getOutputStream(logFilePath, //throw FileError, ErrorTargetExisting
nullptr, /*streamSize*/
- nullptr /*modificationTime*/,
OnUpdateLogfileStatusNoThrow(pc, AFS::getDisplayPath(logFilePath)));
}
catch (ErrorTargetExisting&)
@@ -345,8 +344,8 @@ void BatchStatusHandler::updateProcessedData(int itemsDelta, int64_t bytesDelta)
void BatchStatusHandler::reportInfo(const std::wstring& text)
{
- StatusHandler::reportInfo(text);
- errorLog_.logMsg(text, TYPE_INFO);
+ errorLog_.logMsg(text, TYPE_INFO); //log first!
+ StatusHandler::reportInfo(text); //throw X
}
diff --git a/FreeFileSync/Source/ui/custom_grid.cpp b/FreeFileSync/Source/ui/custom_grid.cpp
index a01c8c5f..e68d1f6c 100755
--- a/FreeFileSync/Source/ui/custom_grid.cpp
+++ b/FreeFileSync/Source/ui/custom_grid.cpp
@@ -1141,16 +1141,16 @@ private:
case SO_CREATE_NEW_LEFT:
case SO_OVERWRITE_LEFT:
case SO_DELETE_LEFT:
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
case SO_COPY_METADATA_TO_LEFT:
return getColorSyncBlue();
case SO_CREATE_NEW_RIGHT:
case SO_OVERWRITE_RIGHT:
case SO_DELETE_RIGHT:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
case SO_COPY_METADATA_TO_RIGHT:
return getColorSyncGreen();
@@ -1244,13 +1244,13 @@ private:
return L"so_delete_left";
case SO_DELETE_RIGHT:
return L"so_delete_right";
- case SO_MOVE_LEFT_SOURCE:
+ case SO_MOVE_LEFT_FROM:
return L"so_move_left_source";
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_TO:
return L"so_move_left_target";
- case SO_MOVE_RIGHT_SOURCE:
+ case SO_MOVE_RIGHT_FROM:
return L"so_move_right_source";
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_TO:
return L"so_move_right_target";
case SO_OVERWRITE_LEFT:
return L"so_update_left";
@@ -1788,13 +1788,13 @@ wxBitmap zen::getSyncOpImage(SyncOperation syncOp)
return getResourceImage(L"so_delete_left_small");
case SO_DELETE_RIGHT:
return getResourceImage(L"so_delete_right_small");
- case SO_MOVE_LEFT_SOURCE:
+ case SO_MOVE_LEFT_FROM:
return getResourceImage(L"so_move_left_source_small");
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_TO:
return getResourceImage(L"so_move_left_target_small");
- case SO_MOVE_RIGHT_SOURCE:
+ case SO_MOVE_RIGHT_FROM:
return getResourceImage(L"so_move_right_source_small");
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_TO:
return getResourceImage(L"so_move_right_target_small");
case SO_OVERWRITE_LEFT:
return getResourceImage(L"so_update_left_small");
diff --git a/FreeFileSync/Source/ui/folder_selector.cpp b/FreeFileSync/Source/ui/folder_selector.cpp
index d8b092b4..09d8a4b5 100755
--- a/FreeFileSync/Source/ui/folder_selector.cpp
+++ b/FreeFileSync/Source/ui/folder_selector.cpp
@@ -69,7 +69,7 @@ FolderSelector::FolderSelector(wxWindow& dropWindow,
auto setupDragDrop = [&](wxWindow& dropWin)
{
setupFileDrop(dropWin);
- dropWin.Connect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onFilesDropped), nullptr, this);
+ dropWin.Connect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onKeyFileDropped), nullptr, this);
};
setupDragDrop(dropWindow_);
@@ -88,10 +88,10 @@ FolderSelector::FolderSelector(wxWindow& dropWindow,
FolderSelector::~FolderSelector()
{
- dropWindow_.Disconnect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onFilesDropped), nullptr, this);
+ dropWindow_.Disconnect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onKeyFileDropped), nullptr, this);
if (dropWindow2_)
- dropWindow2_->Disconnect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onFilesDropped), nullptr, this);
+ dropWindow2_->Disconnect(EVENT_DROP_FILE, FileDropEventHandler(FolderSelector::onKeyFileDropped), nullptr, this);
folderComboBox_ .Disconnect(wxEVT_MOUSEWHEEL, wxMouseEventHandler (FolderSelector::onMouseWheel ), nullptr, this);
folderComboBox_ .Disconnect(wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(FolderSelector::onEditFolderPath ), nullptr, this);
@@ -119,7 +119,7 @@ void FolderSelector::onMouseWheel(wxMouseEvent& event)
}
-void FolderSelector::onFilesDropped(FileDropEvent& event)
+void FolderSelector::onKeyFileDropped(FileDropEvent& event)
{
const auto& itemPaths = event.getPaths();
if (itemPaths.empty())
diff --git a/FreeFileSync/Source/ui/folder_selector.h b/FreeFileSync/Source/ui/folder_selector.h
index c504efa0..633fc2e6 100755
--- a/FreeFileSync/Source/ui/folder_selector.h
+++ b/FreeFileSync/Source/ui/folder_selector.h
@@ -50,7 +50,7 @@ private:
virtual bool shouldSetDroppedPaths(const std::vector<Zstring>& shellItemPaths) { return true; } //return true if drop should be processed
void onMouseWheel (wxMouseEvent& event);
- void onFilesDropped (FileDropEvent& event);
+ void onKeyFileDropped (FileDropEvent& event);
void onEditFolderPath (wxCommandEvent& event);
void onSelectFolder (wxCommandEvent& event);
void onSelectAltFolder(wxCommandEvent& event);
diff --git a/FreeFileSync/Source/ui/grid_view.cpp b/FreeFileSync/Source/ui/grid_view.cpp
index 947bf65c..d6c3c2db 100755
--- a/FreeFileSync/Source/ui/grid_view.cpp
+++ b/FreeFileSync/Source/ui/grid_view.cpp
@@ -203,15 +203,15 @@ GridView::StatusSyncPreview GridView::updateSyncPreview(bool showExcluded, //map
break;
case SO_OVERWRITE_RIGHT:
case SO_COPY_METADATA_TO_RIGHT: //no extra button on screen
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
output.existsSyncDirRight = true;
if (!syncDirOverwRightActive) return false;
break;
case SO_OVERWRITE_LEFT:
case SO_COPY_METADATA_TO_LEFT: //no extra button on screen
- case SO_MOVE_LEFT_TARGET:
- case SO_MOVE_LEFT_SOURCE:
+ case SO_MOVE_LEFT_TO:
+ case SO_MOVE_LEFT_FROM:
output.existsSyncDirLeft = true;
if (!syncDirOverwLeftActive) return false;
break;
diff --git a/FreeFileSync/Source/ui/gui_generated.cpp b/FreeFileSync/Source/ui/gui_generated.cpp
index 1e2dca67..78a317d9 100755
--- a/FreeFileSync/Source/ui/gui_generated.cpp
+++ b/FreeFileSync/Source/ui/gui_generated.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 21 2016)
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -127,7 +127,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
- m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_buttonCancel->Enable( false );
m_buttonCancel->Hide();
@@ -135,7 +135,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonCompare->SetDefault();
- m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_buttonCompare->SetToolTip( _("dummy") );
bSizerTopButtons->Add( m_buttonCompare, 0, wxEXPAND, 5 );
@@ -205,7 +205,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
bSizerTopButtons->Add( 4, 0, 0, 0, 5 );
m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
- m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_buttonSync->SetToolTip( _("dummy") );
bSizerTopButtons->Add( m_buttonSync, 0, wxEXPAND, 5 );
@@ -273,7 +273,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
bSizer182->Add( m_buttonSelectFolderLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltFolderLeft->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") );
bSizer182->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 );
@@ -344,7 +344,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
bSizer179->Add( m_buttonSelectFolderRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelTopRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltFolderRight->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") );
bSizer179->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 );
@@ -550,7 +550,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextFullStatus->Wrap( -1 );
- m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -580,6 +580,7 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const
bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220, -1 ), wxTE_PROCESS_ENTER|wxWANTS_CHARS );
+ m_textCtrlSearchTxt->SetMaxLength( 0 );
bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 );
@@ -1117,7 +1118,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
fgSizer16->Add( m_bitmapByTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
m_toggleBtnByTimeSize = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
- m_toggleBtnByTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnByTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer16->Add( m_toggleBtnByTimeSize, 0, wxEXPAND, 5 );
@@ -1125,7 +1126,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
m_toggleBtnByContent = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
- m_toggleBtnByContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnByContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer16->Add( m_toggleBtnByContent, 0, wxEXPAND, 5 );
@@ -1134,7 +1135,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_toggleBtnBySize = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File size"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_toggleBtnBySize->SetValue( true );
- m_toggleBtnBySize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnBySize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer16->Add( m_toggleBtnBySize, 0, wxEXPAND, 5 );
@@ -1242,7 +1243,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_panelCompSettingsHolder->SetSizer( bSizer275 );
m_panelCompSettingsHolder->Layout();
bSizer275->Fit( m_panelCompSettingsHolder );
- m_notebook->AddPage( m_panelCompSettingsHolder, _("dummy"), true );
+ m_notebook->AddPage( m_panelCompSettingsHolder, _("dummy"), false );
m_panelFilterSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelFilterSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
@@ -1512,22 +1513,22 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
bSizer236 = new wxBoxSizer( wxVERTICAL );
m_toggleBtnTwoWay = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, 30 ), 0 );
- m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer236->Add( m_toggleBtnTwoWay, 0, wxEXPAND|wxBOTTOM, 5 );
m_toggleBtnMirror = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, 30 ), 0 );
- m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer236->Add( m_toggleBtnMirror, 0, wxEXPAND|wxBOTTOM, 5 );
m_toggleBtnUpdate = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, 30 ), 0 );
- m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer236->Add( m_toggleBtnUpdate, 0, wxEXPAND|wxBOTTOM, 5 );
m_toggleBtnCustom = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, 30 ), 0 );
- m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer236->Add( m_toggleBtnCustom, 0, wxEXPAND, 5 );
@@ -1743,7 +1744,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
bSizer156->Add( m_buttonSelectVersioningFolder, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltFolder = new wxBitmapButton( m_panelVersioning, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltFolder->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltFolder->SetToolTip( _("Access online storage") );
bSizer156->Add( m_bpButtonSelectAltFolder, 0, wxEXPAND, 5 );
@@ -1781,7 +1782,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextNamingCvtPart2Bold->Wrap( -1 );
- m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 );
@@ -1858,7 +1859,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_panelSyncSettingsHolder->SetSizer( bSizer276 );
m_panelSyncSettingsHolder->Layout();
bSizer276->Fit( m_panelSyncSettingsHolder );
- m_notebook->AddPage( m_panelSyncSettingsHolder, _("dummy"), false );
+ m_notebook->AddPage( m_panelSyncSettingsHolder, _("dummy"), true );
bSizer190->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
@@ -1869,7 +1870,7 @@ ConfigDlgGenerated::ConfigDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -1971,7 +1972,7 @@ FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID
bSizer134->Add( m_buttonSelectFolderLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltFolderLeft->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") );
bSizer134->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 );
@@ -2021,7 +2022,7 @@ FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID
bSizer135->Add( m_buttonSelectFolderRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltFolderRight->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") );
bSizer135->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 );
@@ -2041,7 +2042,7 @@ FolderPairPanelGenerated::~FolderPairPanelGenerated()
{
}
-SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+CloudSetupDlgGenerated::CloudSetupDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
@@ -2052,15 +2053,38 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
wxBoxSizer* bSizer72;
bSizer72 = new wxBoxSizer( wxHORIZONTAL );
- m_bitmapSftp = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer72->Add( m_bitmapSftp, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+ m_bitmapCloud = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer72->Add( m_bitmapCloud, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
- m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Enter your SFTP login details:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Enter your login details:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextHeader->Wrap( -1 );
bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
- bSizer134->Add( bSizer72, 0, 0, 5 );
+ bSizer72->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer231;
+ bSizer231 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText136 = new wxStaticText( this, wxID_ANY, _("Connection type:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText136->Wrap( -1 );
+ bSizer231->Add( m_staticText136, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_toggleBtnSftp = new wxToggleButton( this, wxID_ANY, _("SFTP"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
+ m_toggleBtnSftp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer231->Add( m_toggleBtnSftp, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_toggleBtnFtp = new wxToggleButton( this, wxID_ANY, _("FTP"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
+ m_toggleBtnFtp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer231->Add( m_toggleBtnFtp, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer72->Add( bSizer231, 0, wxALL, 5 );
+
+
+ bSizer134->Add( bSizer72, 0, wxEXPAND, 5 );
m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), wxLI_HORIZONTAL );
bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 );
@@ -2132,17 +2156,41 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
bSizerAuth = new wxBoxSizer( wxHORIZONTAL );
- wxBoxSizer* bSizer208;
- bSizer208 = new wxBoxSizer( wxVERTICAL );
+ bSizerFtpEncrypt = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer2181;
+ bSizer2181 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText1251 = new wxStaticText( m_panel41, wxID_ANY, _("Encryption:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1251->Wrap( -1 );
+ bSizer2181->Add( m_staticText1251, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_radioBtnEncryptNone = new wxRadioButton( m_panel41, wxID_ANY, _("&Disabled"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ m_radioBtnEncryptNone->SetValue( true );
+ bSizer2181->Add( m_radioBtnEncryptNone, 0, wxEXPAND|wxALL, 5 );
+
+ m_radioBtnEncryptSsl = new wxRadioButton( m_panel41, wxID_ANY, _("&Explicit SSL/TLS"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer2181->Add( m_radioBtnEncryptSsl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
- m_staticText125 = new wxStaticText( m_panel41, wxID_ANY, _("Authentication:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText125->Wrap( -1 );
- bSizer208->Add( m_staticText125, 0, wxALIGN_RIGHT|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ bSizerFtpEncrypt->Add( bSizer2181, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticline5721 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizerFtpEncrypt->Add( m_staticline5721, 0, wxEXPAND, 5 );
+
+
+ bSizerAuth->Add( bSizerFtpEncrypt, 0, wxEXPAND, 5 );
+
+ bSizerSftpAuth = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizer218;
bSizer218 = new wxBoxSizer( wxVERTICAL );
- m_radioBtnPassword = new wxRadioButton( m_panel41, wxID_ANY, _("&Password"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText125 = new wxStaticText( m_panel41, wxID_ANY, _("Authentication:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText125->Wrap( -1 );
+ bSizer218->Add( m_staticText125, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_radioBtnPassword = new wxRadioButton( m_panel41, wxID_ANY, _("&Password"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_radioBtnPassword->SetValue( true );
bSizer218->Add( m_radioBtnPassword, 0, wxEXPAND|wxALL, 5 );
@@ -2150,13 +2198,13 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
bSizer218->Add( m_radioBtnKeyfile, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
- bSizer208->Add( bSizer218, 0, wxALIGN_RIGHT, 5 );
+ bSizerSftpAuth->Add( bSizer218, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_staticline572 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizerSftpAuth->Add( m_staticline572, 0, wxEXPAND, 5 );
- bSizerAuth->Add( bSizer208, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
- m_staticline572 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizerAuth->Add( m_staticline572, 0, wxEXPAND, 5 );
+ bSizerAuth->Add( bSizerSftpAuth, 0, wxEXPAND, 5 );
m_panelAuth = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_panelAuth->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
@@ -2250,10 +2298,12 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
m_panel41->SetSizer( bSizer185 );
m_panel41->Layout();
bSizer185->Fit( m_panel41 );
- bSizer134->Add( m_panel41, 0, wxEXPAND, 5 );
+ bSizer134->Add( m_panel41, 1, wxEXPAND, 5 );
+
+ bSizerSftpTweaks = new wxBoxSizer( wxVERTICAL );
m_staticline571 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline571, 0, wxEXPAND, 5 );
+ bSizerSftpTweaks->Add( m_staticline571, 0, wxEXPAND, 5 );
wxBoxSizer* bSizer219;
bSizer219 = new wxBoxSizer( wxHORIZONTAL );
@@ -2272,10 +2322,10 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
bSizer219->Add( m_hyperlink171, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 );
- bSizer134->Add( bSizer219, 0, wxEXPAND, 5 );
+ bSizerSftpTweaks->Add( bSizer219, 0, wxEXPAND, 5 );
m_staticline57 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline57, 0, wxEXPAND, 5 );
+ bSizerSftpTweaks->Add( m_staticline57, 0, wxEXPAND, 5 );
m_panel411 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_panel411->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
@@ -2296,11 +2346,17 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
m_spinCtrlConnectionCount = new wxSpinCtrl( m_panel411, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 70, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 );
fgSizer1611->Add( m_spinCtrlConnectionCount, 0, wxALL, 5 );
+ wxBoxSizer* bSizer230;
+ bSizer230 = new wxBoxSizer( wxHORIZONTAL );
+
m_staticText138111 = new wxStaticText( m_panel411, wxID_ANY, _("Suggested range: [1 - 10]"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText138111->Wrap( -1 );
m_staticText138111->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
- fgSizer1611->Add( m_staticText138111, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer230->Add( m_staticText138111, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ fgSizer1611->Add( bSizer230, 0, 0, 5 );
m_staticText1231111 = new wxStaticText( m_panel411, wxID_ANY, _("SFTP channels per connection:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1231111->Wrap( -1 );
@@ -2337,7 +2393,10 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
m_panel411->SetSizer( bSizer1851 );
m_panel411->Layout();
bSizer1851->Fit( m_panel411 );
- bSizer134->Add( m_panel411, 1, wxEXPAND, 5 );
+ bSizerSftpTweaks->Add( m_panel411, 1, wxEXPAND, 5 );
+
+
+ bSizer134->Add( bSizerSftpTweaks, 0, wxEXPAND, 5 );
m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 );
@@ -2346,7 +2405,7 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOkay, 0, wxALL, 5 );
@@ -2364,23 +2423,25 @@ SftpSetupDlgGenerated::SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id, c
this->Centre( wxBOTH );
// Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SftpSetupDlgGenerated::OnClose ) );
- m_radioBtnPassword->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SftpSetupDlgGenerated::OnAuthPassword ), NULL, this );
- m_radioBtnKeyfile->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SftpSetupDlgGenerated::OnAuthKeyfile ), NULL, this );
- m_buttonSelectKeyfile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnSelectKeyfile ), NULL, this );
- m_checkBoxShowPassword->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnToggleShowPassword ), NULL, this );
- m_buttonSelectFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnBrowseSftpFolder ), NULL, this );
- m_hyperlink171->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( SftpSetupDlgGenerated::OnHelpSftpPerformance ), NULL, this );
- m_button42->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnDetectServerChannelLimit ), NULL, this );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnOkay ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpSetupDlgGenerated::OnCancel ), NULL, this );
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CloudSetupDlgGenerated::OnClose ) );
+ m_toggleBtnSftp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnConnectionSftp ), NULL, this );
+ m_toggleBtnFtp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnConnectionFtp ), NULL, this );
+ m_radioBtnPassword->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::OnAuthPassword ), NULL, this );
+ m_radioBtnKeyfile->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::OnAuthKeyfile ), NULL, this );
+ m_buttonSelectKeyfile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnSelectKeyfile ), NULL, this );
+ m_checkBoxShowPassword->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnToggleShowPassword ), NULL, this );
+ m_buttonSelectFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnBrowseCloudFolder ), NULL, this );
+ m_hyperlink171->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( CloudSetupDlgGenerated::OnHelpSftpPerformance ), NULL, this );
+ m_button42->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnDetectServerChannelLimit ), NULL, this );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnOkay ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::OnCancel ), NULL, this );
}
-SftpSetupDlgGenerated::~SftpSetupDlgGenerated()
+CloudSetupDlgGenerated::~CloudSetupDlgGenerated()
{
}
-SftpFolderPickerGenerated::SftpFolderPickerGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+AbstractFolderPickerGenerated::AbstractFolderPickerGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
@@ -2391,8 +2452,8 @@ SftpFolderPickerGenerated::SftpFolderPickerGenerated( wxWindow* parent, wxWindow
wxBoxSizer* bSizer72;
bSizer72 = new wxBoxSizer( wxHORIZONTAL );
- m_bitmapSftp = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer72->Add( m_bitmapSftp, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+ m_bitmapServer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer72->Add( m_bitmapServer, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Select a directory on the server:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextHeader->Wrap( -1 );
@@ -2426,7 +2487,7 @@ SftpFolderPickerGenerated::SftpFolderPickerGenerated( wxWindow* parent, wxWindow
m_buttonOkay = new wxButton( this, wxID_OK, _("Select Folder"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOkay, 0, wxALL, 5 );
@@ -2444,13 +2505,13 @@ SftpFolderPickerGenerated::SftpFolderPickerGenerated( wxWindow* parent, wxWindow
this->Centre( wxBOTH );
// Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SftpFolderPickerGenerated::OnClose ) );
- m_treeCtrlFileSystem->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDING, wxTreeEventHandler( SftpFolderPickerGenerated::OnExpandNode ), NULL, this );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpFolderPickerGenerated::OnOkay ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SftpFolderPickerGenerated::OnCancel ), NULL, this );
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AbstractFolderPickerGenerated::OnClose ) );
+ m_treeCtrlFileSystem->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDING, wxTreeEventHandler( AbstractFolderPickerGenerated::OnExpandNode ), NULL, this );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::OnOkay ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::OnCancel ), NULL, this );
}
-SftpFolderPickerGenerated::~SftpFolderPickerGenerated()
+AbstractFolderPickerGenerated::~AbstractFolderPickerGenerated()
{
}
@@ -2508,7 +2569,7 @@ SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wx
m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextVariant->Wrap( -1 );
- m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -2647,7 +2708,7 @@ SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wx
m_buttonStartSync = new wxButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonStartSync->SetDefault();
- m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
@@ -2704,7 +2765,7 @@ CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWi
m_staticTextItemsFound = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextItemsFound->Wrap( -1 );
- m_staticTextItemsFound->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextItemsFound->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer7->Add( m_staticTextItemsFound, 0, wxALIGN_BOTTOM, 5 );
@@ -2716,7 +2777,7 @@ CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWi
m_staticTextItemsRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextItemsRemaining->Wrap( -1 );
- m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerItemsRemaining->Add( m_staticTextItemsRemaining, 0, wxALIGN_BOTTOM, 5 );
@@ -2733,7 +2794,7 @@ CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWi
m_staticTextTimeRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextTimeRemaining->Wrap( -1 );
- m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer7->Add( m_staticTextTimeRemaining, 0, wxALIGN_BOTTOM, 5 );
@@ -2744,7 +2805,7 @@ CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWi
m_staticTextTimeElapsed = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
fgSizer7->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 );
@@ -2830,7 +2891,7 @@ SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWind
m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextPhase->Wrap( -1 );
- m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
@@ -2897,7 +2958,7 @@ SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWind
m_staticTextItemsProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_staticTextItemsProcessed->Wrap( -1 );
- m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer169->Add( m_staticTextItemsProcessed, 0, wxALIGN_BOTTOM, 5 );
@@ -2936,7 +2997,7 @@ SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWind
m_staticTextItemsRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_staticTextItemsRemaining->Wrap( -1 );
- m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer170->Add( m_staticTextItemsRemaining, 0, wxALIGN_BOTTOM, 5 );
@@ -2972,7 +3033,7 @@ SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWind
m_staticTextTimeRemaining = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextTimeRemaining->Wrap( -1 );
- m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer167->Add( m_staticTextTimeRemaining, 0, wxRIGHT|wxLEFT, 5 );
@@ -3002,7 +3063,7 @@ SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWind
m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer168->Add( m_staticTextTimeElapsed, 0, wxRIGHT|wxLEFT, 5 );
@@ -3290,7 +3351,7 @@ BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
bSizer1721->Add( m_buttonSelectLogFolder, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltLogFolder = new wxBitmapButton( m_panelLogfile, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltLogFolder->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltLogFolder->SetToolTip( _("Access online storage") );
bSizer1721->Add( m_bpButtonSelectAltLogFolder, 0, wxEXPAND, 5 );
@@ -3329,7 +3390,7 @@ BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonSaveAs->SetDefault();
- m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -3417,7 +3478,7 @@ DeleteDlgGenerated::DeleteDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOK->SetDefault();
- m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
@@ -3502,7 +3563,7 @@ CopyToDlgGenerated::CopyToDlgGenerated( wxWindow* parent, wxWindowID id, const w
bSizer182->Add( m_buttonSelectTargetFolder, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonSelectAltTargetFolder = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 26, -1 ), wxBU_AUTODRAW );
- m_bpButtonSelectAltTargetFolder->SetToolTip( _("Select SFTP folder") );
+ m_bpButtonSelectAltTargetFolder->SetToolTip( _("Access online storage") );
bSizer182->Add( m_bpButtonSelectAltTargetFolder, 0, wxEXPAND, 5 );
@@ -3530,7 +3591,7 @@ CopyToDlgGenerated::CopyToDlgGenerated( wxWindow* parent, wxWindowID id, const w
m_buttonOK = new wxButton( this, wxID_OK, _("Copy"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOK->SetDefault();
- m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
@@ -3786,7 +3847,7 @@ OptionsDlgGenerated::OptionsDlgGenerated( wxWindow* parent, wxWindowID id, const
m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -3876,7 +3937,7 @@ SelectTimespanDlgGenerated::SelectTimespanDlgGenerated( wxWindow* parent, wxWind
m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -4036,13 +4097,13 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
m_staticTextThanks = new wxStaticText( m_panel391, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
m_staticTextThanks->Wrap( -1 );
- m_staticTextThanks->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_staticTextThanks->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
m_staticTextThanks->SetForegroundColour( wxColour( 0, 0, 0 ) );
bSizer1781->Add( m_staticTextThanks, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
m_buttonShowDonationDetails = new wxButton( m_panel391, wxID_ANY, _("Donation details"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonShowDonationDetails->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_buttonShowDonationDetails->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
bSizer1781->Add( m_buttonShowDonationDetails, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
@@ -4087,13 +4148,13 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
m_staticTextDonate = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync:"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
m_staticTextDonate->Wrap( -1 );
- m_staticTextDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_staticTextDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
m_staticTextDonate->SetForegroundColour( wxColour( 0, 0, 0 ) );
bSizer178->Add( m_staticTextDonate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
m_buttonDonate->SetToolTip( _("http://www.freefilesync.org/donate.php") );
bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
@@ -4135,7 +4196,7 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
bSizer166->Add( m_bitmapHomepage, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("FreeFileSync.org"), wxT("http://www.freefilesync.org/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, true, wxEmptyString ) );
+ m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
m_hyperlink1->SetToolTip( _("http://www.freefilesync.org") );
@@ -4150,7 +4211,7 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
bSizer166->Add( m_bitmapEmail, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@freefilesync.org"), wxT("mailto:zenju@freefilesync.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, true, wxEmptyString ) );
+ m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
m_hyperlink2->SetToolTip( _("mailto:zenju@freefilesync.org") );
@@ -4203,7 +4264,7 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS
m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText54->Wrap( 200 );
- m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
@@ -4401,7 +4462,7 @@ ActivationDlgGenerated::ActivationDlgGenerated( wxWindow* parent, wxWindowID id,
m_buttonActivateOnline = new wxButton( m_panel3511, wxID_ANY, _("Activate online"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonActivateOnline->SetDefault();
- m_buttonActivateOnline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonActivateOnline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer234->Add( m_buttonActivateOnline, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -4438,7 +4499,7 @@ ActivationDlgGenerated::ActivationDlgGenerated( wxWindow* parent, wxWindowID id,
m_buttonCopyUrl = new wxButton( m_panel351, wxID_ANY, _("&Copy to clipboard"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
m_buttonCopyUrl->SetDefault();
- m_buttonCopyUrl->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_buttonCopyUrl->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
bSizer236->Add( m_buttonCopyUrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
@@ -4446,6 +4507,7 @@ ActivationDlgGenerated::ActivationDlgGenerated( wxWindow* parent, wxWindowID id,
bSizer237->Add( bSizer236, 0, wxEXPAND, 5 );
m_textCtrlManualActivationUrl = new wxTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220, -1 ), wxTE_MULTILINE|wxTE_READONLY|wxWANTS_CHARS );
+ m_textCtrlManualActivationUrl->SetMaxLength( 0 );
bSizer237->Add( m_textCtrlManualActivationUrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
wxBoxSizer* bSizer235;
@@ -4456,10 +4518,11 @@ ActivationDlgGenerated::ActivationDlgGenerated( wxWindow* parent, wxWindowID id,
bSizer235->Add( m_staticText13611, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_textCtrlOfflineActivationKey = new wxTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220, -1 ), wxTE_PROCESS_ENTER|wxWANTS_CHARS );
+ m_textCtrlOfflineActivationKey->SetMaxLength( 0 );
bSizer235->Add( m_textCtrlOfflineActivationKey, 1, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_buttonActivateOffline = new wxButton( m_panel351, wxID_ANY, _("Activate offline"), wxDefaultPosition, wxSize( -1, -1 ), 0 );
- m_buttonActivateOffline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
+ m_buttonActivateOffline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
bSizer235->Add( m_buttonActivateOffline, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
diff --git a/FreeFileSync/Source/ui/gui_generated.h b/FreeFileSync/Source/ui/gui_generated.h
index 2d232265..55496908 100755
--- a/FreeFileSync/Source/ui/gui_generated.h
+++ b/FreeFileSync/Source/ui/gui_generated.h
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 21 2016)
+// C++ code generated with wxFormBuilder (version Jun 17 2015)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -479,15 +479,18 @@ public:
};
///////////////////////////////////////////////////////////////////////////////
-/// Class SftpSetupDlgGenerated
+/// Class CloudSetupDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SftpSetupDlgGenerated : public wxDialog
+class CloudSetupDlgGenerated : public wxDialog
{
private:
protected:
- wxStaticBitmap* m_bitmapSftp;
+ wxStaticBitmap* m_bitmapCloud;
wxStaticText* m_staticTextHeader;
+ wxStaticText* m_staticText136;
+ wxToggleButton* m_toggleBtnSftp;
+ wxToggleButton* m_toggleBtnFtp;
wxStaticLine* m_staticline371;
wxPanel* m_panel41;
wxStaticText* m_staticText12311;
@@ -499,6 +502,12 @@ protected:
wxStaticText* m_staticText138;
wxStaticLine* m_staticline58;
wxBoxSizer* bSizerAuth;
+ wxBoxSizer* bSizerFtpEncrypt;
+ wxStaticText* m_staticText1251;
+ wxRadioButton* m_radioBtnEncryptNone;
+ wxRadioButton* m_radioBtnEncryptSsl;
+ wxStaticLine* m_staticline5721;
+ wxBoxSizer* bSizerSftpAuth;
wxStaticText* m_staticText125;
wxRadioButton* m_radioBtnPassword;
wxRadioButton* m_radioBtnKeyfile;
@@ -518,6 +527,7 @@ protected:
wxStaticText* m_staticText1232;
wxTextCtrl* m_textCtrlServerPath;
wxButton* m_buttonSelectFolder;
+ wxBoxSizer* bSizerSftpTweaks;
wxStaticLine* m_staticline571;
wxStaticBitmap* m_bitmapSpeed;
wxStaticText* m_staticText1361;
@@ -539,11 +549,13 @@ protected:
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnConnectionSftp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConnectionFtp( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAuthPassword( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAuthKeyfile( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectKeyfile( wxCommandEvent& event ) { event.Skip(); }
virtual void OnToggleShowPassword( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnBrowseSftpFolder( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnBrowseCloudFolder( wxCommandEvent& event ) { event.Skip(); }
virtual void OnHelpSftpPerformance( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnDetectServerChannelLimit( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
@@ -552,20 +564,20 @@ protected:
public:
- SftpSetupDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("SSH File Transfer Protocol"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
- ~SftpSetupDlgGenerated();
+ CloudSetupDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Access online storage"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
+ ~CloudSetupDlgGenerated();
};
///////////////////////////////////////////////////////////////////////////////
-/// Class SftpFolderPickerGenerated
+/// Class AbstractFolderPickerGenerated
///////////////////////////////////////////////////////////////////////////////
-class SftpFolderPickerGenerated : public wxDialog
+class AbstractFolderPickerGenerated : public wxDialog
{
private:
protected:
- wxStaticBitmap* m_bitmapSftp;
+ wxStaticBitmap* m_bitmapServer;
wxStaticText* m_staticTextHeader;
wxStaticLine* m_staticline371;
wxPanel* m_panel41;
@@ -584,8 +596,8 @@ protected:
public:
- SftpFolderPickerGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("SSH File Transfer Protocol"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
- ~SftpFolderPickerGenerated();
+ AbstractFolderPickerGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
+ ~AbstractFolderPickerGenerated();
};
diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp
index ec457a11..77dbed0a 100755
--- a/FreeFileSync/Source/ui/gui_status_handler.cpp
+++ b/FreeFileSync/Source/ui/gui_status_handler.cpp
@@ -57,9 +57,9 @@ StatusHandlerTemporaryPanel::StatusHandlerTemporaryPanel(MainDialog& dlg) : main
wxAuiPaneInfo& paneInfo = paneArray[i];
if (&paneInfo != &statusPanel &&
- paneInfo.dock_layer == statusPanel.dock_layer &&
- paneInfo.dock_direction == statusPanel.dock_direction &&
- paneInfo.dock_row == statusPanel.dock_row)
+ paneInfo.dock_layer == statusPanel.dock_layer &&
+ paneInfo.dock_direction == statusPanel.dock_direction &&
+ paneInfo.dock_row == statusPanel.dock_row)
return true;
}
return false;
@@ -128,8 +128,8 @@ void StatusHandlerTemporaryPanel::initNewPhase(int itemsTotal, int64_t bytesTota
void StatusHandlerTemporaryPanel::reportInfo(const std::wstring& text)
{
- StatusHandler::reportInfo(text);
- errorLog.logMsg(text, TYPE_INFO);
+ errorLog.logMsg(text, TYPE_INFO); //log first!
+ StatusHandler::reportInfo(text); //throw X
}
@@ -387,8 +387,8 @@ void StatusHandlerFloatingDialog::updateProcessedData(int itemsDelta, int64_t by
void StatusHandlerFloatingDialog::reportInfo(const std::wstring& text)
{
- StatusHandler::reportInfo(text);
- errorLog_.logMsg(text, TYPE_INFO);
+ errorLog_.logMsg(text, TYPE_INFO); //log first!
+ StatusHandler::reportInfo(text); //throw X
}
diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp
index fa54f8de..71736380 100755
--- a/FreeFileSync/Source/ui/main_dlg.cpp
+++ b/FreeFileSync/Source/ui/main_dlg.cpp
@@ -1162,6 +1162,7 @@ void MainDialog::copyToAlternateFolder(const std::vector<zen::FileSystemObject*>
globalCfg.gui.mainDlg.copyToCfg.lastUsedPath,
globalCfg.gui.mainDlg.copyToCfg.keepRelPaths,
globalCfg.gui.mainDlg.copyToCfg.overwriteIfExists,
+ globalCfg.optDialogs,
statusHandler);
//"clearSelection" not needed/desired
}
@@ -1241,33 +1242,28 @@ AbstractPath getExistingParentFolder(const FileSystemObject& fsObj)
template <SelectedSide side, class Function>
-void extractFileDetails(const FileSystemObject& fsObj, Function onDetails)
+void extractFileDescriptor(const FileSystemObject& fsObj, Function onDescriptor)
{
if (!fsObj.isEmpty<side>())
visitFSObject(fsObj, [](const FolderPair& folder) {},
[&](const FilePair& file)
{
- const TempFileBuffer::FileDetails details = { file.getAbstractPath<side>(),
- FileDescriptor(file.getLastWriteTime <side>(),
- file.getFileSize <side>(),
- file.getFileId <side>(),
- file.isFollowedSymlink<side>())
- };
- onDetails(details);
+ const FileDescriptor descr = { file.getAbstractPath<side>(), file.getAttributes<side>() };
+ onDescriptor(descr);
}, [](const SymlinkPair& symlink) {});
}
template <SelectedSide side>
void collectNonNativeFiles(const std::vector<FileSystemObject*>& selectedRows, const TempFileBuffer& tempFileBuf,
- std::set<TempFileBuffer::FileDetails>& workLoad)
+ std::set<FileDescriptor>& workLoad)
{
for (const FileSystemObject* fsObj : selectedRows)
- extractFileDetails<side>(*fsObj, [&](const TempFileBuffer::FileDetails& details)
+ extractFileDescriptor<side>(*fsObj, [&](const FileDescriptor& descr)
{
- if (!AFS::getNativeItemPath(details.path))
- if (tempFileBuf.getTempPath(details).empty()) //TempFileBuffer::createTempFiles() contract!
- workLoad.insert(details);
+ if (!AFS::getNativeItemPath(descr.path))
+ if (tempFileBuf.getTempPath(descr).empty()) //TempFileBuffer::createTempFiles() contract!
+ workLoad.insert(descr);
});
}
@@ -1296,12 +1292,12 @@ void invokeCommandLine(const Zstring& commandLinePhrase, //throw FileError
if (AFS::getNativeItemPath(basePath))
localPath = itemPath; //no matter if item exists or not
else //returns empty if not available (item not existing, error during copy):
- extractFileDetails<side>(*fsObj, [&](const TempFileBuffer::FileDetails& details) { localPath = tempFileBuf.getTempPath(details); });
+ extractFileDescriptor<side>(*fsObj, [&](const FileDescriptor& descr) { localPath = tempFileBuf.getTempPath(descr); });
if (AFS::getNativeItemPath(basePath2))
localPath2 = itemPath2;
else
- extractFileDetails<side2>(*fsObj, [&](const TempFileBuffer::FileDetails& details) { localPath2 = tempFileBuf.getTempPath(details); });
+ extractFileDescriptor<side2>(*fsObj, [&](const FileDescriptor& descr) { localPath2 = tempFileBuf.getTempPath(descr); });
if (localPath .empty()) localPath = replaceCpy(utfTo<Zstring>(L"<" + _("Local path not available for %x.") + L">"), Zstr("%x"), itemPath );
if (localPath2.empty()) localPath2 = replaceCpy(utfTo<Zstring>(L"<" + _("Local path not available for %x.") + L">"), Zstr("%x"), itemPath2);
@@ -1388,7 +1384,7 @@ void MainDialog::openExternalApplication(const Zstring& commandLinePhrase, bool
}
}
- std::set<TempFileBuffer::FileDetails> nonNativeFiles;
+ std::set<FileDescriptor> nonNativeFiles;
if (contains(commandLinePhrase, Zstr("%local_path%")))
{
collectNonNativeFiles< LEFT_SIDE>(selectionLeft, tempFileBuf, nonNativeFiles);
@@ -3877,7 +3873,6 @@ void MainDialog::OnStartSync(wxCommandEvent& event)
//should never happen: sync button is deactivated if they are not in sync
synchronize(getLocalTime(),
- globalCfg.optDialogs,
globalCfg.verifyFileCopy,
globalCfg.copyLockedFiles,
globalCfg.copyFilePermissions,
@@ -3886,6 +3881,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event)
globalCfg.folderAccessTimeout,
syncProcessCfg,
folderCmp,
+ globalCfg.optDialogs,
statusHandler);
}
catch (GuiAbortProcess&)
diff --git a/FreeFileSync/Source/ui/small_dlgs.h b/FreeFileSync/Source/ui/small_dlgs.h
index 7539d78d..fea73b4c 100755
--- a/FreeFileSync/Source/ui/small_dlgs.h
+++ b/FreeFileSync/Source/ui/small_dlgs.h
@@ -27,8 +27,6 @@ struct ReturnSmallDlg
void showAboutDialog(wxWindow* parent);
-ReturnSmallDlg::ButtonPressed showFilterDialog(wxWindow* parent, FilterConfig& filter, const wxString& caption);
-
ReturnSmallDlg::ButtonPressed showCopyToDialog(wxWindow* parent,
const std::vector<const FileSystemObject*>& rowsOnLeft,
const std::vector<const FileSystemObject*>& rowsOnRight,
@@ -48,8 +46,6 @@ ReturnSmallDlg::ButtonPressed showSyncConfirmationDlg(wxWindow* parent,
const SyncStatistics& statistics,
bool& dontShowAgain);
-ReturnSmallDlg::ButtonPressed showCompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig, const wxString& title);
-
ReturnSmallDlg::ButtonPressed showOptionsDlg(wxWindow* parent, xmlAccess::XmlGlobalSettings& globalSettings);
ReturnSmallDlg::ButtonPressed showSelectTimespanDlg(wxWindow* parent, int64_t& timeFrom, int64_t& timeTo);
@@ -64,7 +60,7 @@ enum class ReturnActivationDlg
ReturnActivationDlg showActivationDialog(wxWindow* parent, const std::wstring& lastErrorMsg, const std::wstring& manualActivationUrl, std::wstring& manualActivationKey);
-class DownloadProgressWindow //remporary progress info => life-time: stack
+class DownloadProgressWindow //temporary progress info => life-time: stack
{
public:
DownloadProgressWindow(wxWindow* parent, const Zstring& filePath, uint64_t fileSize);
diff --git a/FreeFileSync/Source/ui/tree_view.cpp b/FreeFileSync/Source/ui/tree_view.cpp
index d50426da..2d0e91cd 100755
--- a/FreeFileSync/Source/ui/tree_view.cpp
+++ b/FreeFileSync/Source/ui/tree_view.cpp
@@ -622,13 +622,13 @@ void TreeView::updateSyncPreview(bool showExcluded,
return syncDeleteRightActive;
case SO_OVERWRITE_RIGHT:
case SO_COPY_METADATA_TO_RIGHT:
- case SO_MOVE_RIGHT_SOURCE:
- case SO_MOVE_RIGHT_TARGET:
+ case SO_MOVE_RIGHT_FROM:
+ case SO_MOVE_RIGHT_TO:
return syncDirOverwRightActive;
case SO_OVERWRITE_LEFT:
case SO_COPY_METADATA_TO_LEFT:
- case SO_MOVE_LEFT_SOURCE:
- case SO_MOVE_LEFT_TARGET:
+ case SO_MOVE_LEFT_FROM:
+ case SO_MOVE_LEFT_TO:
return syncDirOverwLeftActive;
case SO_DO_NOTHING:
return syncDirNoneActive;
diff --git a/FreeFileSync/Source/version/version.h b/FreeFileSync/Source/version/version.h
index f69586f1..aa8f8b2c 100755
--- a/FreeFileSync/Source/version/version.h
+++ b/FreeFileSync/Source/version/version.h
@@ -3,7 +3,7 @@
namespace zen
{
-const char ffsVersion[] = "8.10"; //internal linkage!
+const char ffsVersion[] = "9.0"; //internal linkage!
const char FFS_VERSION_SEPARATOR = '.';
}
diff --git a/wx+/file_drop.h b/wx+/file_drop.h
index 35b7ca9e..526ee64d 100755
--- a/wx+/file_drop.h
+++ b/wx+/file_drop.h
@@ -39,7 +39,7 @@ extern const wxEventType EVENT_DROP_FILE;
class FileDropEvent : public wxCommandEvent
{
public:
- FileDropEvent(const std::vector<Zstring>& droppedPaths) : wxCommandEvent(EVENT_DROP_FILE), droppedPaths_(droppedPaths) {}
+ FileDropEvent(const std::vector<Zstring>& droppedPaths) : wxCommandEvent(EVENT_DROP_FILE), droppedPaths_(droppedPaths) { StopPropagation(); }
const std::vector<Zstring>& getPaths() const { return droppedPaths_; }
diff --git a/zen/file_access.cpp b/zen/file_access.cpp
index ed66aac4..273616e3 100755
--- a/zen/file_access.cpp
+++ b/zen/file_access.cpp
@@ -91,25 +91,22 @@ PathStatus zen::getPathStatus(const Zstring& itemPath) //throw FileError
const Zstring itemName = afterLast(itemPath, FILE_NAME_SEPARATOR, IF_MISSING_RETURN_ALL);
assert(!itemName.empty());
- PathStatus pd = getPathStatus(*parentPath); //throw FileError
- if (!pd.relPath.empty())
- {
- pd.relPath.push_back(itemName);
- return { pd.existingType, pd.existingPath, pd.relPath };
- }
-
- try
- {
- traverseFolder(*parentPath,
- [&](const FileInfo& fi) { if (equalFilePath(fi.itemName, itemName)) throw ItemType::FILE; },
- [&](const FolderInfo& fi) { if (equalFilePath(fi.itemName, itemName)) throw ItemType::FOLDER; },
- [&](const SymlinkInfo& si) { if (equalFilePath(si.itemName, itemName)) throw ItemType::SYMLINK; },
- [](const std::wstring& errorMsg) { throw FileError(errorMsg); });
-
- return { pd.existingType, *parentPath, { itemName } }; //throw FileError
- }
- catch (const ItemType& type) { return { type, itemPath, {} }; } //yes, exceptions for control-flow are bad design... but, but...
+ PathStatus ps = getPathStatus(*parentPath); //throw FileError
+ if (ps.relPath.empty() &&
+ ps.existingType != ItemType::FILE) //obscure, but possible (and not an error)
+ try
+ {
+ traverseFolder(*parentPath,
+ [&](const FileInfo& fi) { if (equalFilePath(fi.itemName, itemName)) throw ItemType::FILE; },
+ [&](const FolderInfo& fi) { if (equalFilePath(fi.itemName, itemName)) throw ItemType::FOLDER; },
+ [&](const SymlinkInfo& si) { if (equalFilePath(si.itemName, itemName)) throw ItemType::SYMLINK; },
+ [](const std::wstring& errorMsg) { throw FileError(errorMsg); });
+ }
+ catch (const ItemType& type) { return { type, itemPath, {} }; } //yes, exceptions for control-flow are bad design... but, but...
//we're not CPU-bound here and finding the item after getItemType() previously failed is exceptional (even C:\pagefile.sys should be found)
+
+ ps.relPath.push_back(itemName);
+ return ps;
}
@@ -337,7 +334,7 @@ void zen::renameFile(const Zstring& pathSource, const Zstring& pathTarget) //thr
{
renameFile_sub(pathSource, pathTarget); //throw FileError, ErrorDifferentVolume, ErrorTargetExisting
}
- catch (const ErrorTargetExisting&)
+ catch (ErrorTargetExisting&)
{
throw;
}
@@ -388,7 +385,7 @@ void setWriteTimeNative(const Zstring& itemPath, const struct ::timespec& modTim
}
-
+warn_static("remove after test")
void zen::setFileTime(const Zstring& filePath, int64_t modTime, ProcSymlink procSl) //throw FileError
{
struct ::timespec writeTime = {};
@@ -588,9 +585,9 @@ void zen::copySymlink(const Zstring& sourceLink, const Zstring& targetLink, bool
namespace
{
-InSyncAttributes copyFileOsSpecific(const Zstring& sourceFile, //throw FileError, ErrorTargetExisting
- const Zstring& targetFile,
- const IOCallback& notifyUnbufferedIO)
+FileCopyResult copyFileOsSpecific(const Zstring& sourceFile, //throw FileError, ErrorTargetExisting
+ const Zstring& targetFile,
+ const IOCallback& notifyUnbufferedIO)
{
int64_t totalUnbufferedIO = 0;
@@ -631,19 +628,28 @@ InSyncAttributes copyFileOsSpecific(const Zstring& sourceFile, //throw FileError
//close output file handle before setting file time; also good place to catch errors when closing stream!
fileOut.finalize(); //throw FileError, (X) essentially a close() since buffers were already flushed
+Opt<FileError> errorModTime;
+ try
+ {
//we cannot set the target file times (::futimes) while the file descriptor is still open after a write operation:
//this triggers bugs on samba shares where the modification time is set to current time instead.
//Linux: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340236
// http://comments.gmane.org/gmane.linux.file-systems.cifs/2854
//OS X: http://www.freefilesync.org/forum/viewtopic.php?t=356
setWriteTimeNative(targetFile, sourceInfo.st_mtim, ProcSymlink::FOLLOW); //throw FileError
+ }
+ catch (const FileError& e)
+ {
+ errorModTime = FileError(e.toString()); //avoid slicing
+ }
- InSyncAttributes newAttrib;
- newAttrib.fileSize = sourceInfo.st_size;
- newAttrib.modificationTime = sourceInfo.st_mtim.tv_sec; //
- newAttrib.sourceFileId = extractFileId(sourceInfo);
- newAttrib.targetFileId = extractFileId(targetInfo);
- return newAttrib;
+ FileCopyResult result;
+ result.fileSize = sourceInfo.st_size;
+ result.modTime = sourceInfo.st_mtim.tv_sec; //
+ result.sourceFileId = extractFileId(sourceInfo);
+ result.targetFileId = extractFileId(targetInfo);
+ result.errorModTime = errorModTime;
+ return result;
}
/* ------------------
@@ -660,10 +666,10 @@ copyFileWindowsDefault(::CopyFileEx) copyFileWindowsStream(::BackupRead/::Backu
}
-InSyncAttributes zen::copyNewFile(const Zstring& sourceFile, const Zstring& targetFile, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- const IOCallback& notifyUnbufferedIO)
+FileCopyResult zen::copyNewFile(const Zstring& sourceFile, const Zstring& targetFile, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const IOCallback& notifyUnbufferedIO)
{
- const InSyncAttributes attr = copyFileOsSpecific(sourceFile, targetFile, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ const FileCopyResult result = copyFileOsSpecific(sourceFile, targetFile, notifyUnbufferedIO); //throw FileError, ErrorTargetExisting, ErrorFileLocked
//at this point we know we created a new file, so it's fine to delete it for cleanup!
ZEN_ON_SCOPE_FAIL(try { removeFilePlain(targetFile); }
@@ -672,5 +678,5 @@ InSyncAttributes zen::copyNewFile(const Zstring& sourceFile, const Zstring& targ
if (copyFilePermissions)
copyItemPermissions(sourceFile, targetFile, ProcSymlink::FOLLOW); //throw FileError
- return attr;
+ return result;
}
diff --git a/zen/file_access.h b/zen/file_access.h
index ee33da93..a06e5b17 100755
--- a/zen/file_access.h
+++ b/zen/file_access.h
@@ -56,7 +56,7 @@ enum class ProcSymlink
DIRECT,
FOLLOW
};
-void setFileTime(const Zstring& filePath, int64_t modificationTime, ProcSymlink procSl); //throw FileError
+void setFileTime(const Zstring& filePath, int64_t modTime, ProcSymlink procSl); //throw FileError
//symlink handling: always evaluate target
uint64_t getFileSize(const Zstring& filePath); //throw FileError
@@ -85,17 +85,18 @@ void copyNewDirectory(const Zstring& sourcePath, const Zstring& targetPath, bool
void copySymlink(const Zstring& sourceLink, const Zstring& targetLink, bool copyFilePermissions); //throw FileError
-struct InSyncAttributes
+struct FileCopyResult
{
uint64_t fileSize = 0;
- int64_t modificationTime = 0; //time_t UTC compatible
+ int64_t modTime = 0; //time_t-compatible (UTC)
FileId sourceFileId;
FileId targetFileId;
+ Opt<FileError> errorModTime; //failure to set modification time
};
-InSyncAttributes copyNewFile(const Zstring& sourceFile, const Zstring& targetFile, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
- //accummulated delta != file size! consider ADS, sparse, compressed files
- const IOCallback& notifyUnbufferedIO); //may be nullptr; throw X!
+FileCopyResult copyNewFile(const Zstring& sourceFile, const Zstring& targetFile, bool copyFilePermissions, //throw FileError, ErrorTargetExisting, ErrorFileLocked
+ //accummulated delta != file size! consider ADS, sparse, compressed files
+ const IOCallback& notifyUnbufferedIO); //may be nullptr; throw X!
}
#endif //FILE_ACCESS_H_8017341345614857
diff --git a/zen/file_id_def.h b/zen/file_id_def.h
index 3dcd21b9..8d429fbc 100755
--- a/zen/file_id_def.h
+++ b/zen/file_id_def.h
@@ -20,7 +20,7 @@ using VolumeId = decltype(impl::StatDummy::st_dev);
using FileIndex = decltype(impl::StatDummy::st_ino);
-struct FileId //always available on Linux, and *generally* available on Windows)
+struct FileId //always available on Linux, and *generally* available on Windows)
{
FileId() {}
FileId(VolumeId volId, FileIndex fIdx) : volumeId(volId), fileIndex(fIdx) {}
diff --git a/zen/file_traverser.h b/zen/file_traverser.h
index 79bcae11..e2085698 100755
--- a/zen/file_traverser.h
+++ b/zen/file_traverser.h
@@ -19,7 +19,7 @@ struct FileInfo
Zstring itemName;
Zstring fullPath;
uint64_t fileSize; //[bytes]
- int64_t lastWriteTime; //number of seconds since Jan. 1st 1970 UTC
+ int64_t modTime; //number of seconds since Jan. 1st 1970 UTC
};
struct FolderInfo
@@ -32,7 +32,7 @@ struct SymlinkInfo
{
Zstring itemName;
Zstring fullPath;
- int64_t lastWriteTime; //number of seconds since Jan. 1st 1970 UTC
+ int64_t modTime; //number of seconds since Jan. 1st 1970 UTC
};
//- non-recursive
diff --git a/zen/symlink_target.h b/zen/symlink_target.h
index 84b8452a..6ff7f327 100755
--- a/zen/symlink_target.h
+++ b/zen/symlink_target.h
@@ -17,7 +17,7 @@
namespace zen
{
-Zstring getResolvedSymlinkPath(const Zstring& linkPath); //throw FileError; Win: requires Vista or later!
+Zstring getSymlinkResolvedPath(const Zstring& linkPath); //throw FileError; Win: requires Vista or later!
Zstring getSymlinkTargetRaw (const Zstring& linkPath); //throw FileError
}
@@ -68,7 +68,7 @@ inline
Zstring getSymlinkTargetRaw(const Zstring& linkPath) { return getSymlinkRawTargetString_impl(linkPath); }
inline
-Zstring getResolvedSymlinkPath(const Zstring& linkPath) { return getResolvedSymlinkPath_impl(linkPath); }
+Zstring getSymlinkResolvedPath(const Zstring& linkPath) { return getResolvedSymlinkPath_impl(linkPath); }
}
diff --git a/zenXml/zenxml/parser.h b/zenXml/zenxml/parser.h
index 5a529f9a..6f08297b 100755
--- a/zenXml/zenxml/parser.h
+++ b/zenXml/zenxml/parser.h
@@ -426,7 +426,7 @@ private:
{ "?>", Token::TK_DECL_END },
{ "</", Token::TK_LESS_SLASH },
{ "/>", Token::TK_SLASH_GREATER },
- { "<", Token::TK_LESS }, //evaluate after TK_DECL_BEGIN!
+ { "<", Token::TK_LESS }, //evaluate after TK_DECL_BEGIN!
{ ">", Token::TK_GREATER },
{ "=", Token::TK_EQUAL },
{ "\"", Token::TK_QUOTE },
bgstack15