Repository: VirtoCommerce/vc-platform
Pull request #2904: VCST-2934: Rename export/import to backup/restore functionality
Author: login: OlegoO
Created: 2025-03-26T12:20:58Z | Merged: 2025-03-31T11:59:34Z

## Description
feat: Rename export/import to backup/restore functionality

![image](https://github.com/user-attachments/assets/0678258e-8d4e-4a2d-b239-87a6066df2c6)


## References
### QA-test:
### Jira-link:


https://virtocommerce.atlassian.net/browse/VCST-2934
### Artifact URL:

Image tag:
ghcr.io/VirtoCommerce/platform:3.883.0-pr-2904-1fe2-vcst-2934-backup-restore-1fe2a002


Diff:
diff --git a/src/VirtoCommerce.Platform.Core/PlatformOptions.cs b/src/VirtoCommerce.Platform.Core/PlatformOptions.cs
index 98ee5ff7ea8..89922b289ec 100644
--- a/src/VirtoCommerce.Platform.Core/PlatformOptions.cs
+++ b/src/VirtoCommerce.Platform.Core/PlatformOptions.cs
@@ -39,7 +39,7 @@ public class PlatformOptions
         // Default path to store export files
         public string DefaultExportFolder { get; set; } = "export";
 
-        public string DefaultExportFileName { get; set; } = "exported_{0:yyyyMMddHHmmss}.zip";
+        public string DefaultExportFileName { get; set; } = "vc_backup_{0:yyyyMMddHHmmss}.zip";
 
         // Local path to running process like WkhtmlToPdf
         public string ProcessesPath { get; set; }
diff --git a/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformBackupRestoreController.cs b/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformBackupRestoreController.cs
new file mode 100644
index 00000000000..84c4fe62be6
--- /dev/null
+++ b/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformBackupRestoreController.cs
@@ -0,0 +1,210 @@
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using Hangfire;
+using Hangfire.Server;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Options;
+using VirtoCommerce.Platform.Core;
+using VirtoCommerce.Platform.Core.Exceptions;
+using VirtoCommerce.Platform.Core.ExportImport;
+using VirtoCommerce.Platform.Core.ExportImport.PushNotifications;
+using VirtoCommerce.Platform.Core.PushNotifications;
+using VirtoCommerce.Platform.Core.Security;
+using VirtoCommerce.Platform.Hangfire;
+
+using Permissions = VirtoCommerce.Platform.Core.PlatformConstants.Security.Permissions;
+
+namespace VirtoCommerce.Platform.Web.Controllers.Api
+{
+    [Route("api/platform")]
+    [ApiExplorerSettings(IgnoreApi = true)]
+    [Authorize]
+    public class PlatformBackupRestoreController : Controller
+    {
+        private readonly IPlatformExportImportManager _platformExportManager;
+        private readonly IPushNotificationManager _pushNotifier;
+        private readonly IUserNameResolver _userNameResolver;
+        private readonly PlatformOptions _platformOptions;
+
+        public PlatformBackupRestoreController(
+            IPlatformExportImportManager platformExportManager,
+            IPushNotificationManager pushNotifier,
+            IUserNameResolver userNameResolver,
+            IOptions<PlatformOptions> options)
+        {
+            _platformExportManager = platformExportManager;
+            _pushNotifier = pushNotifier;
+            _userNameResolver = userNameResolver;
+            _platformOptions = options.Value;
+        }
+
+
+        [HttpPost]
+        [Route("export")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult<PlatformExportPushNotification> ProcessExport([FromBody] PlatformImportExportRequest exportRequest)
+        {
+            var notification = new PlatformExportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform backup task",
+                Description = "starting backup..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformBackupBackgroundAsync(exportRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("import")]
+        [Authorize(Permissions.PlatformImport)]
+        public ActionResult<PlatformImportPushNotification> ProcessImport([FromBody] PlatformImportExportRequest importRequest)
+        {
+            var notification = new PlatformImportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform restore task",
+                Description = "starting restore..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformRestoreBackgroundAsync(importRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("exortimport/tasks/{jobId}/cancel")]
+        public ActionResult Cancel([FromRoute] string jobId)
+        {
+            BackgroundJob.Delete(jobId);
+            return Ok();
+        }
+
+        [HttpGet]
+        [Route("export/download/{fileName}")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult DownloadExportFile([FromRoute] string fileName)
+        {
+            var localPath = GetSafeFullPath(_platformOptions.DefaultExportFolder, fileName);
+
+            //Load source data only from local file system
+            using (System.IO.File.Open(localPath, FileMode.Open))
+            {
+                var provider = new FileExtensionContentTypeProvider();
+                if (!provider.TryGetContentType(localPath, out var contentType))
+                {
+                    contentType = "application/octet-stream";
+                }
+                return PhysicalFile(localPath, contentType);
+            }
+        }
+
+
+        public async Task PlatformRestoreBackgroundAsync(PlatformImportExportRequest importRequest, PlatformImportPushNotification pushNotification, IJobCancellationToken cancellationToken, PerformContext context)
+        {
+            void ProgressCallback(ExportImportProgressInfo x)
+            {
+                pushNotification.Path(x);
+                pushNotification.JobId = context.BackgroundJob.Id;
+                _pushNotifier.Send(pushNotification);
+            }
+
+            var now = DateTime.UtcNow;
+            try
+            {
+                var cancellationTokenWrapper = new JobCancellationTokenWrapper(cancellationToken);
+
+                var localPath = GetSafeFullPath(_platformOptions.LocalUploadFolderPath, importRequest.FileUrl);
+
+                //Load source data only from local file system
+                using (var stream = new FileStream(localPath, FileMode.Open))
+                {
+                    var manifest = importRequest.ToManifest();
+                    manifest.Created = now;
+                    await _platformExportManager.ImportAsync(stream, manifest, ProgressCallback, cancellationTokenWrapper);
+                }
+            }
+            catch (JobAbortedException)
+            {
+                //do nothing
+            }
+            catch (Exception ex)
+            {
+                pushNotification.Errors.Add(ex.ExpandExceptionMessage());
+            }
+            finally
+            {
+                pushNotification.Description = "Platform restore process completed successfully.";
+                pushNotification.Finished = DateTime.UtcNow;
+                await _pushNotifier.SendAsync(pushNotification);
+            }
+        }
+
+        public async Task PlatformBackupBackgroundAsync(PlatformImportExportRequest exportRequest, PlatformExportPushNotification pushNotification, IJobCancellationToken cancellationToken, PerformContext context)
+        {
+            void ProgressCallback(ExportImportProgressInfo x)
+            {
+                pushNotification.Path(x);
+                pushNotification.JobId = context.BackgroundJob.Id;
+                _pushNotifier.Send(pushNotification);
+            }
+
+            try
+            {
+                var fileName = string.Format(_platformOptions.DefaultExportFileName, DateTime.UtcNow);
+                var localTmpFolder = Path.GetFullPath(Path.Combine(_platformOptions.DefaultExportFolder));
+                var localTmpPath = Path.Combine(localTmpFolder, Path.GetFileName(fileName));
+
+                if (!Directory.Exists(localTmpFolder))
+                {
+                    Directory.CreateDirectory(localTmpFolder);
+                }
+
+                if (System.IO.File.Exists(localTmpPath))
+                {
+                    System.IO.File.Delete(localTmpPath);
+                }
+
+                //Import first to local tmp folder because Azure blob storage doesn't support some special file access mode
+                using (var stream = System.IO.File.OpenWrite(localTmpPath))
+                {
+                    var manifest = exportRequest.ToManifest();
+                    await _platformExportManager.ExportAsync(stream, manifest, ProgressCallback, new JobCancellationTokenWrapper(cancellationToken));
+                    pushNotification.DownloadUrl = $"api/platform/export/download/{fileName}";
+                }
+            }
+            catch (JobAbortedException)
+            {
+                //do nothing
+            }
+            catch (Exception ex)
+            {
+                pushNotification.Errors.Add(ex.ExpandExceptionMessage());
+            }
+            finally
+            {
+                pushNotification.Description = "Platform backup process completed successfully.";
+                pushNotification.Finished = DateTime.UtcNow;
+                await _pushNotifier.SendAsync(pushNotification);
+            }
+        }
+
+        private static string GetSafeFullPath(string basePath, string relativePath)
+        {
+            var baseFullPath = Path.GetFullPath(basePath);
+            var result = Path.GetFullPath(Path.Combine(baseFullPath, relativePath));
+
+            if (!result.StartsWith(baseFullPath + Path.DirectorySeparatorChar))
+            {
+                throw new PlatformException($"Invalid path {relativePath}");
+            }
+
+            return result;
+        }
+    }
+}
diff --git a/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformExportImportController.cs b/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformExportImportController.cs
index 847d8380b9e..8383d59405c 100644
--- a/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformExportImportController.cs
+++ b/src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformExportImportController.cs
@@ -8,7 +8,6 @@
 using Hangfire.Server;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.StaticFiles;
 using Microsoft.Extensions.Options;
 using VirtoCommerce.Platform.Core;
 using VirtoCommerce.Platform.Core.Common;
@@ -165,68 +164,6 @@ public ActionResult<PlatformExportManifest> LoadExportManifest([FromQuery] strin
             return Ok(retVal);
         }
 
-        [HttpPost]
-        [Route("export")]
-        [Authorize(Permissions.PlatformExport)]
-        public ActionResult<PlatformExportPushNotification> ProcessExport([FromBody] PlatformImportExportRequest exportRequest)
-        {
-            var notification = new PlatformExportPushNotification(_userNameResolver.GetCurrentUserName())
-            {
-                Title = "Platform export task",
-                Description = "starting export...."
-            };
-            _pushNotifier.Send(notification);
-
-            var jobId = BackgroundJob.Enqueue(() => PlatformExportBackgroundAsync(exportRequest, notification, JobCancellationToken.Null, null));
-            notification.JobId = jobId;
-            return Ok(notification);
-        }
-
-        [HttpPost]
-        [Route("import")]
-        [Authorize(Permissions.PlatformImport)]
-        public ActionResult<PlatformImportPushNotification> ProcessImport([FromBody] PlatformImportExportRequest importRequest)
-        {
-            var notification = new PlatformImportPushNotification(_userNameResolver.GetCurrentUserName())
-            {
-                Title = "Platform import task",
-                Description = "starting import...."
-            };
-            _pushNotifier.Send(notification);
-
-            var jobId = BackgroundJob.Enqueue(() => PlatformImportBackgroundAsync(importRequest, notification, JobCancellationToken.Null, null));
-            notification.JobId = jobId;
-
-            return Ok(notification);
-        }
-
-        [HttpPost]
-        [Route("exortimport/tasks/{jobId}/cancel")]
-        public ActionResult Cancel([FromRoute] string jobId)
-        {
-            BackgroundJob.Delete(jobId);
-            return Ok();
-        }
-
-        [HttpGet]
-        [Route("export/download/{fileName}")]
-        [Authorize(Permissions.PlatformExport)]
-        public ActionResult DownloadExportFile([FromRoute] string fileName)
-        {
-            var localPath = GetSafeFullPath(_platformOptions.DefaultExportFolder, fileName);
-
-            //Load source data only from local file system
-            using (System.IO.File.Open(localPath, FileMode.Open))
-            {
-                var provider = new FileExtensionContentTypeProvider();
-                if (!provider.TryGetContentType(localPath, out var contentType))
-                {
-                    contentType = "application/octet-stream";
-                }
-                return PhysicalFile(localPath, contentType);
-            }
-        }
-
         private async Task<IList<SampleDataInfo>> InnerDiscoverSampleDataAsync()
         {
             var sampleDataUrl = _platformOptions.SampleDataUrl;
@@ -342,100 +279,12 @@ await DownloadFileAsync(new Uri(url), tmpFilePath, async (bytesReceived, bytesTo
             finally
             {
                 await _settingsManager.SetValueAsync(PlatformConstants.Settings.Setup.SampleDataState.Name, SampleDataState.Completed);
-                pushNotification.Description = "Import finished";
-                pushNotification.Finished = DateTime.UtcNow;
-                await _pushNotifier.SendAsync(pushNotification);
-            }
-        }
-
-        public async Task PlatformImportBackgroundAsync(PlatformImportExportRequest importRequest, PlatformImportPushNotification pushNotification, IJobCancellationToken cancellationToken, PerformContext context)
-        {
-            void progressCallback(ExportImportProgressInfo x)
-            {
-                pushNotification.Path(x);
-                pushNotification.JobId = context.BackgroundJob.Id;
-                _pushNotifier.Send(pushNotification);
-            }
-
-            var now = DateTime.UtcNow;
-            try
-            {
-                var cancellationTokenWrapper = new JobCancellationTokenWrapper(cancellationToken);
-
-                var localPath = GetSafeFullPath(_platformOptions.LocalUploadFolderPath, importRequest.FileUrl);
-
-                //Load source data only from local file system
-                using (var stream = new FileStream(localPath, FileMode.Open))
-                {
-                    var manifest = importRequest.ToManifest();
-                    manifest.Created = now;
-                    await _platformExportManager.ImportAsync(stream, manifest, progressCallback, cancellationTokenWrapper);
-                }
-            }
-            catch (JobAbortedException)
-            {
-                //do nothing
-            }
-            catch (Exception ex)
-            {
-                pushNotification.Errors.Add(ex.ExpandExceptionMessage());
-            }
-            finally
-            {
-                pushNotification.Description = "Import finished";
+                pushNotification.Description = "Sample data import process completed successfully.";
                 pushNotification.Finished = DateTime.UtcNow;
                 await _pushNotifier.SendAsync(pushNotification);
             }
         }
 
-        public async Task PlatformExportBackgroundAsync(PlatformImportExportRequest exportRequest, PlatformExportPushNotification pushNotification, IJobCancellationToken cancellationToken, PerformContext context)
-        {
-            void progressCallback(ExportImportProgressInfo x)
-            {
-                pushNotification.Path(x);
-                pushNotification.JobId = context.BackgroundJob.Id;
-                _pushNotifier.Send(pushNotification);
-            }
-
-            try
-            {
-                var fileName = string.Format(_platformOptions.DefaultExportFileName, DateTime.UtcNow);
-                var localTmpFolder = Path.GetFullPath(Path.Combine(_platformOptions.DefaultExportFolder));
-                var localTmpPath = Path.Combine(localTmpFolder, Path.GetFileName(fileName));
-
-                if (!Directory.Exists(localTmpFolder))
-                {
-                    Directory.CreateDirectory(localTmpFolder);
-                }
-
-                if (System.IO.File.Exists(localTmpPath))
-                {
-                    System.IO.File.Delete(localTmpPath);
-                }
-
-                //Import first to local tmp folder because Azure blob storage doesn't support some special file access mode
-                using (var stream = System.IO.File.OpenWrite(localTmpPath))
-                {
-                    var manifest = exportRequest.ToManifest();
-                    await _platformExportManager.ExportAsync(stream, manifest, progressCallback, new JobCancellationTokenWrapper(cancellationToken));
-                    pushNotification.DownloadUrl = $"api/platform/export/download/{fileName}";
-                }
-            }
-            catch (JobAbortedException)
-            {
-                //do nothing
-            }
-            catch (Exception ex)
-            {
-                pushNotification.Errors.Add(ex.ExpandExceptionMessage());
-            }
-            finally
-            {
-                pushNotification.Description = "Export finished";
-                pushNotification.Finished = DateTime.UtcNow;
-                await _pushNotifier.SendAsync(pushNotification);
-            }
-        }
 
         private static string GetSafeFullPath(string basePath, string relativePath)
         {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/de.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/de.VirtoCommerce.Platform.json
index 8672e202272..b1599d1abfc 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/de.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/de.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Dynamische Eigenschaften",
       "security": "Sicherheit",
       "modules": "Module",
-      "export-import": "Export & Import",
+      "export-import": "Sicherung & Wiederherstellung",
       "user-profile": "Benutzerprofil",
       "assets": "Ressourcen",
       "toggle-favorites": "Umschalt + Leertaste zum Umschalten der Favoriten",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Datenexport",
+        "title": "Datensicherung",
         "labels": {
           "platform-entries": "Plattformeinträge",
-          "choose-modules": "Module zum Exportieren auswählen",
+          "choose-modules": "Wählen Sie Module für die Sicherung",
           "download-url": "Download-URL",
           "errors": "Fehler",
           "start": "Start",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Datenimport",
+        "title": "Datenwiederherstellung",
         "labels": {
-          "start-import": "Import starten",
-          "select-file": "Wählen Sie eine .zip-Datei zum Importieren aus. Die Datei muss vom Commerce Manager-Datenexport erstellt worden sein",
-          "drag-note": "Ziehen Sie eine .zip-Datei zum Importieren hierher. Die Datei muss vom Commerce Manager-Datenexport erstellt worden sein",
+          "start-import": "Wiederherstellung starten",
+          "select-file": "Wählen Sie die .zip-Datei zur Wiederherstellung aus. Die Datei muss von der Virto Commerce-Datensicherung erstellt worden sein",
+          "drag-note": "Ziehen Sie die .zip-Datei hierher, um sie wiederherzustellen. Die Datei muss von der Virto Commerce-Datensicherung erstellt worden sein",
           "upload-failed": "Upload fehlgeschlagen",
           "upload-progress": "Upload-Fortschritt",
-          "import-progress": "Import-Fortschritt",
-          "import-finished": "Import abgeschlossen",
-          "import-data-information": "Import-Dateninformationen",
+          "import-progress": "Wiederherstellungsfortschritt",
+          "import-finished": "Wiederherstellung abgeschlossen",
+          "import-data-information": "Dateninformationen wiederherstellen",
           "author": "Autor",
           "data-file-created": "Datendatei erstellt",
           "created-platform-version": "Erstellt in Plattformversion",
           "platform-entries": "Plattformeinträge",
-          "choose-modules": "Module zum Importieren auswählen",
+          "choose-modules": "Wählen Sie Module zur Wiederherstellung",
           "no-data": "Keine Daten",
           "errors": "Fehler",
           "start": "Start",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Datenexport und -import",
+        "title": "Daten sichern und wiederherstellen",
         "menu": {
           "export": {
-            "title": "Export",
-            "description": "Daten werden in eine Datei gespeichert, damit sie später importiert werden können"
+            "title": "Sicherung",
+            "description": "Daten werden in einer Datei gespeichert, um sie später wiederherzustellen"
           },
           "import": {
-            "title": "Import",
-            "description": "Daten aus einer exportierten Datei importieren"
+            "title": "Wiederherstellung",
+            "description": "Stellen Sie Daten aus einer Sicherungsdatei für die zukünftige Nutzung wieder her"
           }
         }
       },
@@ -921,9 +921,9 @@
     "platform:security:delete": "Benutzer und Rollen löschen",
     "platform:security:verifyEmail": "Verifizierten Status ändern und Verifizierungs-E-Mail senden",
     "background_jobs:manage": "Zugriff auf die Hangfire-Konsole",
-    "platform:exportImport:access": "Export/Import im Hauptmenü anzeigen",
-    "platform:import": "Platform- und Moduldaten importieren",
-    "platform:export": "Platform- und Moduldaten exportieren",
+    "platform:exportImport:access": "Backup/Wiederherstellung im Hauptmenü anzeigen",
+    "platform:import": "Plattform- und Modul-Daten wiederherstellen",
+    "platform:export": "Plattform- und Modul-Daten sichern",
     "platform:security:loginOnBehalf": "Im Namen eines Kunden anmelden"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json
index 7a4f142c40f..cf0b5cd8447 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Dynamic properties",
       "security": "Security",
       "modules": "Modules",
-      "export-import": "Export & Import",
+      "export-import": "Backup & Restore",
       "user-profile": "User profile",
       "assets": "Assets",
       "toggle-favorites": "Shift + Space to toggle favorites",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Data export",
+        "title": "Data backup",
         "labels": {
           "platform-entries": "Platform entries",
-          "choose-modules": "Choose modules to export",
+          "choose-modules": "Choose modules to backup",
           "download-url": "Download URL",
           "errors": "Errors",
           "start": "Start",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Data import",
+        "title": "Data restore",
         "labels": {
-          "start-import": "Start import",
-          "select-file": "Select .zip file to import. The file must be produced by Commerce Manager data export",
-          "drag-note": "Drag and drop .zip file to import. The file must be produced by Commerce Manager data export",
+          "start-import": "Start restore",
+          "select-file": "Select .zip file to restore. The file must be produced by Virto Commerce data backup",
+          "drag-note": "Drag and drop .zip file to restore. The file must be produced by Virto Commerce data backup",
           "upload-failed": "Upload failed",
           "upload-progress": "Upload progress",
-          "import-progress": "Import progress",
-          "import-finished": "Import finished",
-          "import-data-information": "Import data information",
+          "import-progress": "Restore progress",
+          "import-finished": "Restore finished",
+          "import-data-information": "Restore data information",
           "author": "Author",
           "data-file-created": "Data file created",
           "created-platform-version": "Created in Platform version",
           "platform-entries": "Platform entries",
-          "choose-modules": "Choose modules to import",
+          "choose-modules": "Choose modules to restore",
           "no-data": "No data",
           "errors": "Errors",
           "start": "Start",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Data export and import",
+        "title": "Data backup and restore",
         "menu": {
           "export": {
-            "title": "Export",
-            "description": "Data will be saved out to a file so it can be imported later"
+            "title": "Backup",
+            "description": "Data will be saved to a file for future restoration"
           },
           "import": {
-            "title": "Import",
-            "description": "Import data from an exported file"
+            "title": "Restore",
+            "description": "Restore data from a backup file for future use"
           }
         }
       },
@@ -920,9 +920,9 @@
     "platform:security:delete": "Delete users and roles",
     "platform:security:verifyEmail": "Change verified state and send verification email",
     "background_jobs:manage": "Access to the Hangfire console",
-    "platform:exportImport:access": "View Export/Import in the main menu",
-    "platform:import": "Import Platform and modules data",
-    "platform:export": "Export Platform and modules data",
+    "platform:exportImport:access": "View Backup/Restore in the main menu",
+    "platform:import": "Restore platform and modules data",
+    "platform:export": "Backup platform and modules data",
     "platform:security:loginOnBehalf": "Login on behalf of a customer"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/es.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/es.VirtoCommerce.Platform.json
index e8167d7741b..675f0154f08 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/es.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/es.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Propiedades dinámicas",
       "security": "Seguridad",
       "modules": "Módulos",
-      "export-import": "Exportar e Importar",
+      "export-import": "Copia de seguridad y Restauración",
       "user-profile": "Perfil de usuario",
       "assets": "Recursos",
       "toggle-favorites": "Shift + Espacio para alternar favoritos",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Exportación de datos",
+        "title": "Copia de seguridad de datos",
         "labels": {
           "platform-entries": "Entradas de la plataforma",
-          "choose-modules": "Elegir módulos para exportar",
+          "choose-modules": "Elija los módulos para la copia de seguridad",
           "download-url": "URL de descarga",
           "errors": "Errores",
           "start": "Inicio",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Importación de datos",
+        "title": "Restauración de datos",
         "labels": {
-          "start-import": "Iniciar importación",
-          "select-file": "Seleccionar archivo .zip para importar. El archivo debe ser producido por la exportación de datos del Commerce Manager",
-          "drag-note": "Arrastrar y soltar archivo .zip para importar. El archivo debe ser producido por la exportación de datos del Commerce Manager",
+          "start-import": "Iniciar restauración",
+          "select-file": "Seleccione el archivo .zip para restaurar. El archivo debe haber sido generado por la copia de seguridad de datos de Virto Commerce",
+          "drag-note": "Arrastre y suelte el archivo .zip para restaurar. El archivo debe haber sido generado por la copia de seguridad de datos de Virto Commerce",
           "upload-failed": "Fallo en la subida",
-          "upload-progress": "Progreso de subida",
-          "import-progress": "Progreso de importación",
+          "upload-progress": "Progreso de restauración",
+          "import-progress": "Restauración finalizada",
           "import-finished": "Importación finalizada",
-          "import-data-information": "Información de datos de importación",
+          "import-data-information": "Restaurar información de datos",
           "author": "Autor",
           "data-file-created": "Archivo de datos creado",
           "created-platform-version": "Creado en la versión de la Plataforma",
           "platform-entries": "Entradas de la plataforma",
-          "choose-modules": "Elegir módulos para importar",
+          "choose-modules": "Elija los módulos para restaurar",
           "no-data": "Sin datos",
           "errors": "Errores",
           "start": "Inicio",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Exportación e importación de datos",
+        "title": "Copia de seguridad y restauración de datos",
         "menu": {
           "export": {
-            "title": "Exportar",
-            "description": "Los datos se guardarán en un archivo para poder importarlos más tarde"
+            "title": "Copia de seguridad",
+            "description": "Los datos se guardarán en un archivo para su futura restauración"
           },
           "import": {
-            "title": "Importar",
-            "description": "Importar datos desde un archivo exportado"
+            "title": "Restauración",
+            "description": "Restaurar datos desde un archivo de copia de seguridad para su uso futuro"
           }
         }
       },
@@ -900,7 +900,7 @@
     "platform:asset:delete": "Eliminar recursos de la Plataforma",
     "platform:asset:update": "Cambiar recursos de la Plataforma",
     "platform:asset:create": "Cargar nuevos recursos de la Plataforma",
-    "platform:asset:read": "Descargar recursos de la Plataforma",  
+    "platform:asset:read": "Descargar recursos de la Plataforma",
     "platform:module:read": "Ver detalles del módulo",
     "platform:module:access": "Ver módulos en el menú principal",
     "platform:module:manage": "Instalar/desinstalar módulos",
@@ -919,9 +919,9 @@
     "platform:security:delete": "Eliminar usuarios y roles",
     "platform:security:verifyEmail": "Cambiar estado verificado y enviar correo electrónico de verificación",
     "background_jobs:manage": "Acceso a la consola de Hangfire",
-    "platform:exportImport:access": "Ver Exportar/Importar en el menú principal",
-    "platform:import": "Importar datos de la Plataforma y módulos",
-    "platform:export": "Exportar datos de la Plataforma y módulos",
+    "platform:exportImport:access": "Ver Copia de seguridad/Restauración en el menú principal",
+    "platform:import": "Restaurar datos de la plataforma y módulos",
+    "platform:export": "Hacer copia de seguridad de la plataforma y módulos",
     "platform:security:loginOnBehalf": "Iniciar sesión en nombre de un cliente"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/fr.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/fr.VirtoCommerce.Platform.json
index 31532671c42..1ac1ce65642 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/fr.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/fr.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Propriétés dynamiques",
       "security": "Sécurité",
       "modules": "Modules",
-      "export-import": "Exporter & Importer",
+      "export-import": "Sauvegarde et Restauration",
       "user-profile": "Profil utilisateur",
       "assets": "Ressources",
       "toggle-favorites": "Maj + Espace pour basculer les favoris",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Exportation de données",
+        "title": "Sauvegarde des données",
         "labels": {
           "platform-entries": "Entrées de la plateforme",
-          "choose-modules": "Choisir les modules à exporter",
+          "choose-modules": "Choisissez les modules à sauvegarder",
           "download-url": "URL de téléchargement",
           "errors": "Erreurs",
           "start": "Début",
@@ -183,16 +183,16 @@
         }
       },
       "import-main": {
-        "title": "Importation de données",
+        "title": "Restauration des données",
         "labels": {
-          "start-import": "Démarrer l'importation",
-          "select-file": "Sélectionner un fichier .zip à importer. Le fichier doit être produit par l'exportation de données du Commerce Manager",
-          "drag-note": "Glisser-déposer un fichier .zip à importer. Le fichier doit être produit par l'exportation de données du Commerce Manager",
+          "start-import": "Démarrer la restauration",
+          "select-file": "Sélectionnez le fichier .zip à restaurer. Le fichier doit avoir été créé par la sauvegarde des données de Virto Commerce",
+          "drag-note": "GGlissez-déposez le fichier .zip pour le restaurer. Le fichier doit avoir été créé par la sauvegarde des données de Virto Commerce",
           "upload-failed": "Échec du téléchargement",
           "upload-progress": "Progression du téléchargement",
-          "import-progress": "Progression de l'importation",
-          "import-finished": "Importation terminée",
-          "import-data-information": "Informations sur les données importées",
+          "import-progress": "Progression de la restauration",
+          "import-finished": "Restauration terminée",
+          "import-data-information": "Choisissez les modules à restaurer",
           "author": "Auteur",
           "data-file-created": "Fichier de données créé",
           "created-platform-version": "Créé dans la version de la plateforme",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Exportation et importation de données",
+        "title": "Sauvegarde et restauration des données",
         "menu": {
           "export": {
-            "title": "Exporter",
-            "description": "Les données seront sauvegardées dans un fichier pour pouvoir être importées ultérieurement"
+            "title": "Sauvegarde",
+            "description": "Les données seront enregistrées dans un fichier pour une restauration ultérieure"
           },
           "import": {
-            "title": "Importer",
-            "description": "Importer des données à partir d'un fichier exporté"
+            "title": "Restauration",
+            "description": "Restaurer les données à partir d’un fichier de sauvegarde pour une utilisation future"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "Supprimer les utilisateurs et les rôles",
     "platform:security:verifyEmail": "Modifier l'état vérifié et envoyer un email de vérification",
     "background_jobs:manage": "Accès à la console Hangfire",
-    "platform:exportImport:access": "Voir Exporter/Importer dans le menu principal",
-    "platform:import": "Importer les données de la plateforme et des modules",
-    "platform:export": "Exporter les données de la plateforme et des modules",
+    "platform:exportImport:access": "Voir Sauvegarde/Restauration dans le menu principal",
+    "platform:import": "Restaurer les données de la plateforme et des modules",
+    "platform:export": "Sauvegarder les données de la plateforme et des modules",
     "platform:security:loginOnBehalf": "Se connecter au nom d'un client"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/it.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/it.VirtoCommerce.Platform.json
index c3092df0d85..cd4193dd13d 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/it.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/it.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Proprietà dinamiche",
       "security": "Sicurezza",
       "modules": "Moduli",
-      "export-import": "Esporta & Importa",
+      "export-import": "Backup e Ripristino",
       "user-profile": "Profilo utente",
       "assets": "Risorse",
       "toggle-favorites": "Shift + Spazio per attivare/disattivare i preferiti",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Esportazione dati",
+        "title": "Backup dei dati",
         "labels": {
           "platform-entries": "Voci della piattaforma",
-          "choose-modules": "Scegli i moduli da esportare",
+          "choose-modules": "Scegli i moduli da salvare",
           "download-url": "URL di download",
           "errors": "Errori",
           "start": "Inizio",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Importazione dati",
+        "title": "Ripristino dati",
         "labels": {
-          "start-import": "Avvia importazione",
-          "select-file": "Seleziona il file .zip da importare. Il file deve essere prodotto dall'esportazione dati di Commerce Manager",
-          "drag-note": "Trascina e rilascia il file .zip da importare. Il file deve essere prodotto dall'esportazione dati di Commerce Manager",
+          "start-import": "Avvia ripristino",
+          "select-file": "Seleziona il file .zip da ripristinare. Il file deve essere stato generato dal backup dei dati di Virto Commerce",
+          "drag-note": "Trascina e rilascia il file .zip per ripristinarlo. Il file deve essere stato generato dal backup dei dati di Virto Commerce",
           "upload-failed": "Caricamento fallito",
           "upload-progress": "Progresso del caricamento",
-          "import-progress": "Progresso dell'importazione",
-          "import-finished": "Importazione completata",
-          "import-data-information": "Informazioni sui dati importati",
+          "import-progress": "Avanzamento del ripristino",
+          "import-finished": "Ripristino completato",
+          "import-data-information": "Ripristina informazioni sui dati",
           "author": "Autore",
           "data-file-created": "File dati creato",
           "created-platform-version": "Creato nella versione della piattaforma",
           "platform-entries": "Voci della piattaforma",
-          "choose-modules": "Scegli i moduli da importare",
+          "choose-modules": "Scegli i moduli da ripristinare",
           "no-data": "Nessun dato",
           "errors": "Errori",
           "start": "Inizio",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Esportazione e importazione dati",
+        "title": "Backup e ripristino dei dati",
         "menu": {
           "export": {
-            "title": "Esporta",
-            "description": "I dati saranno salvati in un file per poter essere importati successivamente"
+            "title": "Backup",
+            "description": "I dati verranno salvati in un file per un futuro ripristino"
           },
           "import": {
-            "title": "Importa",
-            "description": "Importa dati da un file esportato"
+            "title": "Ripristino",
+            "description": "Ripristina i dati da un file di backup per utilizzi futuri"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "Elimina utenti e ruoli",
     "platform:security:verifyEmail": "Modifica lo stato di verifica e invia email di verifica",
     "background_jobs:manage": "Accesso alla console Hangfire",
-    "platform:exportImport:access": "Visualizza Esporta/Importa nel menu principale",
-    "platform:import": "Importa dati della Piattaforma e dei moduli",
-    "platform:export": "Esporta dati della Piattaforma e dei moduli",
+    "platform:exportImport:access": "Visualizza Backup/Ripristino nel menu principale",
+    "platform:import": "Ripristina dati della piattaforma e dei moduli",
+    "platform:export": "Esegui il backup della piattaforma e dei moduli",
     "platform:security:loginOnBehalf": "Accedi per conto di un cliente"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ja.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ja.VirtoCommerce.Platform.json
index 11412cf189a..282493e6315 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ja.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ja.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "動的プロパティ",
       "security": "セキュリティ",
       "modules": "モジュール",
-      "export-import": "エクスポート＆インポート",
+      "export-import": "バックアップと復元",
       "user-profile": "ユーザープロフィール",
       "assets": "リソース",
       "toggle-favorites": "Shift + スペースでお気に入りを切り替え",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "データエクスポート",
+        "title": "データのバックアップ",
         "labels": {
           "platform-entries": "プラットフォームエントリー",
-          "choose-modules": "エクスポートするモジュールを選択",
+          "choose-modules": "バックアップするモジュールを選択",
           "download-url": "ダウンロードURL",
           "errors": "エラー",
           "start": "開始",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "データインポート",
+        "title": "データの復元",
         "labels": {
-          "start-import": "インポート開始",
-          "select-file": "インポートする.zipファイルを選択してください。ファイルはCommerce Managerのデータエクスポートで作成されたものである必要があります",
-          "drag-note": "インポートする.zipファイルをドラッグ＆ドロップしてください。ファイルはCommerce Managerのデータエクスポートで作成されたものである必要があります",
+          "start-import": "復元を開始",
+          "select-file": ".zipファイルを選択して復元します。このファイルはVirto Commerceのデータバックアップによって作成されたものである必要があります。",
+          "drag-note": ".zipファイルをドラッグ＆ドロップして復元します。このファイルはVirto Commerceのデータバックアップによって作成されたものである必要があります。",
           "upload-failed": "アップロード失敗",
-          "upload-progress": "アップロード進行状況",
-          "import-progress": "インポート進行状況",
-          "import-finished": "インポート完了",
-          "import-data-information": "インポートデータ情報",
+          "upload-progress": "復元の進行状況",
+          "import-progress": "復元が完了しました",
+          "import-finished": "データ情報の復元",
+          "import-data-information": "データ情報の復元",
           "author": "作成者",
           "data-file-created": "データファイル作成日時",
           "created-platform-version": "作成されたプラットフォームバージョン",
           "platform-entries": "プラットフォームエントリー",
-          "choose-modules": "インポートするモジュールを選択",
+          "choose-modules": "復元するモジュールを選択",
           "no-data": "データなし",
           "errors": "エラー",
           "start": "開始",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "データエクスポートとインポート",
+        "title": "データのバックアップと復元",
         "menu": {
           "export": {
-            "title": "エクスポート",
-            "description": "データはファイルに保存され、後でインポートできます"
+            "title": "バックアップ",
+            "description": "データは将来の復元のためにファイルに保存されます"
           },
           "import": {
-            "title": "インポート",
-            "description": "エクスポートされたファイルからデータをインポート"
+            "title": "復元",
+            "description": "バックアップファイルからデータを復元し、将来使用できるようにします"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "ユーザーとロールの削除",
     "platform:security:verifyEmail": "確認済み状態の変更と確認メールの送信",
     "background_jobs:manage": "Hangfireコンソールへのアクセス",
-    "platform:exportImport:access": "メインメニューでエクスポート/インポートを表示",
-    "platform:import": "プラットフォームとモジュールデータのインポート",
-    "platform:export": "プラットフォームとモジュールデータのエクスポート",
+    "platform:exportImport:access": "メインメニューでバックアップ/復元を表示",
+    "platform:import": "プラットフォームとモジュールのデータを復元",
+    "platform:export": "プラットフォームとモジュールのデータをバックアップ",
     "platform:security:loginOnBehalf": "顧客の代理としてログイン"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pl.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pl.VirtoCommerce.Platform.json
index 621145d0df5..06d50a55b3b 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pl.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pl.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Właściwości dynamiczne",
       "security": "Bezpieczeństwo",
       "modules": "Moduły",
-      "export-import": "Eksport i Import",
+      "export-import": "Kopia zapasowa i Przywracanie",
       "user-profile": "Profil użytkownika",
       "assets": "Zasoby",
       "toggle-favorites": "Shift + Spacja, aby przełączyć ulubione",
@@ -154,7 +154,7 @@
         }
       },
       "export-main": {
-        "title": "Eksport danych",
+        "title": "Kopia zapasowa danych",
         "labels": {
           "platform-entries": "Wpisy platformy",
           "choose-modules": "Wybierz moduły do eksportu",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Import danych",
+        "title": "Przywracanie danych",
         "labels": {
-          "start-import": "Rozpocznij import",
-          "select-file": "Wybierz plik .zip do importu. Plik musi być wygenerowany przez eksport danych Commerce Manager",
-          "drag-note": "Przeciągnij i upuść plik .zip do importu. Plik musi być wygenerowany przez eksport danych Commerce Manager",
+          "start-import": "Rozpocznij przywracanie",
+          "select-file": "Wybierz plik .zip do przywrócenia. Plik musi zostać utworzony przez kopię zapasową danych Virto Commerce",
+          "drag-note": "Przeciągnij i upuść plik .zip, aby go przywrócić. Plik musi zostać utworzony przez kopię zapasową danych Virto Commerce",
           "upload-failed": "Przesyłanie nie powiodło się",
           "upload-progress": "Postęp przesyłania",
-          "import-progress": "Postęp importu",
-          "import-finished": "Import zakończony",
-          "import-data-information": "Informacje o importowanych danych",
+          "import-progress": "Postęp przywracania",
+          "import-finished": "Przywracanie zakończone",
+          "import-data-information": "Przywracanie informacji o danych",
           "author": "Autor",
           "data-file-created": "Plik danych utworzony",
           "created-platform-version": "Utworzono w wersji platformy",
           "platform-entries": "Wpisy platformy",
-          "choose-modules": "Wybierz moduły do importu",
+          "choose-modules": "Wybierz moduły do przywrócenia",
           "no-data": "Brak danych",
           "errors": "Błędy",
           "start": "Start",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Eksport i import danych",
+        "title": "Kopia zapasowa i przywracanie danych",
         "menu": {
           "export": {
-            "title": "Eksport",
-            "description": "Dane zostaną zapisane do pliku, aby można je było później zaimportować"
+            "title": "Kopia zapasowa",
+            "description": "Dane zostaną zapisane w pliku do późniejszego przywrócenia"
           },
           "import": {
-            "title": "Import",
-            "description": "Importuj dane z wyeksportowanego pliku"
+            "title": "Przywracanie",
+            "description": "Przywróć dane z pliku kopii zapasowej do późniejszego użycia"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "Usuń użytkowników i role",
     "platform:security:verifyEmail": "Zmień stan weryfikacji i wyślij email weryfikacyjny",
     "background_jobs:manage": "Dostęp do konsoli Hangfire",
-    "platform:exportImport:access": "Wyświetl Eksport/Import w menu głównym",
-    "platform:import": "Importuj dane platformy i modułów",
-    "platform:export": "Eksportuj dane platformy i modułów",
+    "platform:exportImport:access": "Wyświetl Kopia zapasowa/Przywracanie w menu głównym",
+    "platform:import": "Przywróć dane platformy i modułów",
+    "platform:export": "Utwórz kopię zapasową danych platformy i modułów",
     "platform:security:loginOnBehalf": "Zaloguj się w imieniu klienta"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pt.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pt.VirtoCommerce.Platform.json
index d1c472a2c7a..9c792337ccf 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pt.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pt.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Propriedades dinâmicas",
       "security": "Segurança",
       "modules": "Módulos",
-      "export-import": "Exportar e Importar",
+      "export-import": "Backup e Restauração",
       "user-profile": "Perfil do usuário",
       "assets": "Recursos",
       "toggle-favorites": "Shift + Espaço para alternar favoritos",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Exportação de dados",
+        "title": "Backup de dados",
         "labels": {
           "platform-entries": "Entradas da plataforma",
-          "choose-modules": "Escolha os módulos para exportar",
+          "choose-modules": "Escolha os módulos para backup",
           "download-url": "URL de download",
           "errors": "Erros",
           "start": "Início",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Importação de dados",
+        "title": "Restauração de dados",
         "labels": {
-          "start-import": "Iniciar importação",
-          "select-file": "Selecione o arquivo .zip para importar. O arquivo deve ser produzido pela exportação de dados do Commerce Manager",
-          "drag-note": "Arraste e solte o arquivo .zip para importar. O arquivo deve ser produzido pela exportação de dados do Commerce Manager",
+          "start-import": "Iniciar restauração",
+          "select-file": "Selecione o arquivo .zip para restaurar. O arquivo deve ter sido gerado pelo backup de dados do Virto Commerce",
+          "drag-note": "Arraste e solte o arquivo .zip para restaurá-lo. O arquivo deve ter sido gerado pelo backup de dados do Virto Commerce",
           "upload-failed": "Falha no upload",
           "upload-progress": "Progresso do upload",
-          "import-progress": "Progresso da importação",
-          "import-finished": "Importação concluída",
-          "import-data-information": "Informações dos dados importados",
+          "import-progress": "Progresso da restauração",
+          "import-finished": "Restauração concluída",
+          "import-data-information": "Restaurar informações dos dados",
           "author": "Autor",
           "data-file-created": "Arquivo de dados criado",
           "created-platform-version": "Criado na versão da Plataforma",
           "platform-entries": "Entradas da plataforma",
-          "choose-modules": "Escolha os módulos para importar",
+          "choose-modules": "Escolha os módulos para restaurar",
           "no-data": "Sem dados",
           "errors": "Erros",
           "start": "Início",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Exportação e importação de dados",
+        "title": "Backup e restauração de dados",
         "menu": {
           "export": {
-            "title": "Exportar",
-            "description": "Os dados serão salvos em um arquivo para que possam ser importados posteriormente"
+            "title": "Backup",
+            "description": "Os dados serão salvos em um arquivo para futura restauração"
           },
           "import": {
-            "title": "Importar",
-            "description": "Importar dados de um arquivo exportado"
+            "title": "Restauração",
+            "description": "Restaurar dados a partir de um arquivo de backup para uso futuro"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "Excluir usuários e funções",
     "platform:security:verifyEmail": "Alterar estado verificado e enviar e-mail de verificação",
     "background_jobs:manage": "Acesso ao console Hangfire",
-    "platform:exportImport:access": "Visualizar Exportação/Importação no menu principal",
-    "platform:import": "Importar dados da Plataforma e módulos",
-    "platform:export": "Exportar dados da Plataforma e módulos",
+    "platform:exportImport:access": "Exibir Backup/Restauração no menu principal",
+    "platform:import": "Restaurar dados da plataforma e dos módulos",
+    "platform:export": "Fazer backup dos dados da plataforma e dos módulos",
     "platform:security:loginOnBehalf": "Login em nome de um cliente"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ru.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ru.VirtoCommerce.Platform.json
index 4667acf13ed..660351cd04e 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ru.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ru.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "Динамические свойства",
       "security": "Безопасность",
       "modules": "Модули",
-      "export-import": "Экспорт и импорт",
+      "export-import": "Резервное копирование и Восстановление",
       "user-profile": "Профиль пользователя",
       "assets": "Ресурсы",
       "toggle-favorites": "Shift + Пробел для переключения избранного",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "Экспорт данных",
+        "title": "Резервное копирование данных",
         "labels": {
           "platform-entries": "Записи платформы",
-          "choose-modules": "Выберите модули для экспорта",
+          "choose-modules": "Выберите модули для резервного копирования",
           "download-url": "URL для скачивания",
           "errors": "Ошибки",
           "start": "Начало",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "Импорт данных",
+        "title": "Восстановление данных",
         "labels": {
-          "start-import": "Начать импорт",
-          "select-file": "Выберите .zip файл для импорта. Файл должен быть создан экспортом данных Commerce Manager",
-          "drag-note": "Перетащите .zip файл для импорта. Файл должен быть создан экспортом данных Commerce Manager",
+          "start-import": "Начать восстановление",
+          "select-file": "Выберите .zip-файл для восстановления. Файл должен быть создан резервным копированием данных Virto Commerce",
+          "drag-note": "Перетащите .zip-файл сюда для восстановления. Файл должен быть создан резервным копированием данных Virto Commerce",
           "upload-failed": "Сбой загрузки",
           "upload-progress": "Прогресс загрузки",
-          "import-progress": "Прогресс импорта",
-          "import-finished": "Импорт завершен",
-          "import-data-information": "Информация об импортируемых данных",
+          "import-progress": "Прогресс восстановления",
+          "import-finished": "Восстановление завершено",
+          "import-data-information": "Информация о восстановленых данных",
           "author": "Автор",
           "data-file-created": "Файл данных создан",
           "created-platform-version": "Создано в версии платформы",
           "platform-entries": "Записи платформы",
-          "choose-modules": "Выберите модули для импорта",
+          "choose-modules": "Выберите модули для восстановления",
           "no-data": "Нет данных",
           "errors": "Ошибки",
           "start": "Начало",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "Экспорт и импорт данных",
+        "title": "Резервное копирование и восстановление данных",
         "menu": {
           "export": {
-            "title": "Экспорт",
-            "description": "Данные будут сохранены в файл, чтобы их можно было импортировать позже"
+            "title": "Резервное копирование",
+            "description": "Данные будут сохранены в файле для последующего восстановления"
           },
           "import": {
-            "title": "Импорт",
-            "description": "Импорт данных из экспортированного файла"
+            "title": "Восстановление",
+            "description": "Восстановите данные из файла резервной копии для будущего использования"
           }
         }
       },
@@ -921,9 +921,9 @@
     "platform:security:delete": "Удаление пользователей и ролей",
     "platform:security:verifyEmail": "Изменение состояния подтверждения и отправка письма для подтверждения",
     "background_jobs:manage": "Доступ к консоли Hangfire",
-    "platform:exportImport:access": "Просмотр Экспорта/Импорта в главном меню",
-    "platform:import": "Импорт данных платформы и модулей",
-    "platform:export": "Экспорт данных платформы и модулей",
+    "platform:exportImport:access": "Просмотр Резервного копирования/Восстановления в главном меню",
+    "platform:import": "Восстановить данные платформы и модулей",
+    "platform:export": "Создать резервную копию данных платформы и модулей",
     "platform:security:loginOnBehalf": "Вход от имени клиента"
   },
   "settings": {
diff --git a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/zh.VirtoCommerce.Platform.json b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/zh.VirtoCommerce.Platform.json
index 26af20299c3..c8f8c8c48d7 100644
--- a/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/zh.VirtoCommerce.Platform.json
+++ b/src/VirtoCommerce.Platform.Web/wwwroot/Localizations/zh.VirtoCommerce.Platform.json
@@ -10,7 +10,7 @@
       "dynamic-properties": "动态属性",
       "security": "安全",
       "modules": "模块",
-      "export-import": "导出 & 导入",
+      "export-import": "备份与恢复",
       "user-profile": "用户资料",
       "assets": "资源",
       "toggle-favorites": "按 Shift + 空格键切换收藏夹",
@@ -154,10 +154,10 @@
         }
       },
       "export-main": {
-        "title": "数据导出",
+        "title": "数据备份",
         "labels": {
           "platform-entries": "平台条目",
-          "choose-modules": "选择要导出的模块",
+          "choose-modules": "选择要备份的模块",
           "download-url": "下载URL",
           "errors": "错误",
           "start": "开始",
@@ -183,21 +183,21 @@
         }
       },
       "import-main": {
-        "title": "数据导入",
+        "title": "数据恢复",
         "labels": {
-          "start-import": "开始导入",
-          "select-file": "选择要导入的.zip文件。该文件必须由Commerce Manager数据导出生成",
-          "drag-note": "拖放要导入的.zip文件。该文件必须由Commerce Manager数据导出生成",
+          "start-import": "开始恢复",
+          "select-file": "选择 .zip 文件进行恢复。该文件必须由 Virto Commerce 数据备份生成。",
+          "drag-note": "拖放 .zip 文件进行恢复。该文件必须由 Virto Commerce 数据备份生成。",
           "upload-failed": "上传失败",
           "upload-progress": "上传进度",
-          "import-progress": "导入进度",
-          "import-finished": "导入完成",
-          "import-data-information": "导入数据信息",
+          "import-progress": "恢复进度",
+          "import-finished": "恢复完成",
+          "import-data-information": "恢复数据信息",
           "author": "作者",
           "data-file-created": "数据文件创建时间",
           "created-platform-version": "创建于平台版本",
           "platform-entries": "平台条目",
-          "choose-modules": "选择要导入的模块",
+          "choose-modules": "选择要恢复的模块",
           "no-data": "无数据",
           "errors": "错误",
           "start": "开始",
@@ -223,15 +223,15 @@
         }
       },
       "exportImport-main": {
-        "title": "数据导出和导入",
+        "title": "数据备份与恢复",
         "menu": {
           "export": {
-            "title": "导出",
-            "description": "数据将被保存到文件中，以便稍后导入"
+            "title": "备份",
+            "description": "数据将保存到文件，以便将来恢复"
           },
           "import": {
-            "title": "导入",
-            "description": "从导出的文件中导入数据"
+            "title": "恢复",
+            "description": "从备份文件恢复数据，以供将来使用"
           }
         }
       },
@@ -919,9 +919,9 @@
     "platform:security:delete": "删除用户和角色",
     "platform:security:verifyEmail": "更改验证状态并发送验证邮件",
     "background_jobs:manage": "访问 Hangfire 控制台",
-    "platform:exportImport:access": "在主菜单中查看导出/导入",
-    "platform:import": "导入平台和模块数据",
-    "platform:export": "导出平台和模块数据",
+    "platform:exportImport:access": "在主菜单中查看备份/恢复",
+    "platform:import": "恢复平台和模块数据",
+    "platform:export": "备份平台和模块数据",
     "platform:security:loginOnBehalf": "代表客户登录"
   },
   "settings": {


Reviews:
user: login: github-advanced-security[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-26T12:24:59Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T12:47:53Z
user: login: vc-ci
body: Test Suite: Test Suites/Modules/module_Assets
Tests: 13
Failures: 0
Errors: 0
Time: 7.461
Timestamp: 26-03-2025T12:52:30
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:00:03Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:00:35Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:03:59Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:11:14Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:12:31Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:15:03Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:15:42Z
user: login: Maria-Volkova-Tula
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:16:10Z
user: login: Maria-Volkova-Tula
body: Let's capitalize only the first word in the module name for consistency. This does not apply to German, Chinese, and Japanese localizations. Comments are provided
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T13:20:34Z
user: login: vc-ci
body: Test Suite: Test Suites/Modules/module_Assets
Tests: 13
Failures: 0
Errors: 0
Time: 7.559
Timestamp: 31-03-2025T07:54:15
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-31T08:01:15Z
user: login: vc-ci
body: Test Suite: Test Suites/Modules/module_Assets
Tests: 13
Failures: 0
Errors: 0
Time: 7.535
Timestamp: 31-03-2025T08:11:24
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-31T08:17:57Z
user: login: artem-dudarev
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-31T09:30:57Z

Review comments:
diff_hunk: @@ -0,0 +1,220 @@
+using System;
+using System.IO;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Hangfire;
+using Hangfire.Server;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Options;
+using VirtoCommerce.Platform.Core;
+using VirtoCommerce.Platform.Core.Exceptions;
+using VirtoCommerce.Platform.Core.ExportImport;
+using VirtoCommerce.Platform.Core.ExportImport.PushNotifications;
+using VirtoCommerce.Platform.Core.PushNotifications;
+using VirtoCommerce.Platform.Core.Security;
+using VirtoCommerce.Platform.Core.Settings;
+using VirtoCommerce.Platform.Hangfire;
+
+using Permissions = VirtoCommerce.Platform.Core.PlatformConstants.Security.Permissions;
+
+namespace VirtoCommerce.Platform.Web.Controllers.Api
+{
+    [Route("api/platform")]
+    [ApiExplorerSettings(IgnoreApi = true)]
+    [Authorize]
+    public class PlatformBackupRestoreController : Controller
+    {
+        private readonly IPlatformExportImportManager _platformExportManager;
+        private readonly IPushNotificationManager _pushNotifier;
+        private readonly ISettingsManager _settingsManager;
+        private readonly IUserNameResolver _userNameResolver;
+        private readonly PlatformOptions _platformOptions;
+        private readonly IHttpClientFactory _httpClientFactory;
+
+        private static readonly object _lockObject = new();
+
+        public PlatformBackupRestoreController(
+            IPlatformExportImportManager platformExportManager,
+            IPushNotificationManager pushNotifier,
+            ISettingsManager settingManager,
+            IUserNameResolver userNameResolver,
+            IOptions<PlatformOptions> options,
+            IHttpClientFactory httpClientFactory)
+        {
+            _platformExportManager = platformExportManager;
+            _pushNotifier = pushNotifier;
+            _settingsManager = settingManager;
+            _userNameResolver = userNameResolver;
+            _httpClientFactory = httpClientFactory;
+            _platformOptions = options.Value;
+        }
+
+
+        [HttpPost]
+        [Route("export")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult<PlatformExportPushNotification> ProcessExport([FromBody] PlatformImportExportRequest exportRequest)
+        {
+            var notification = new PlatformExportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform backup task",
+                Description = "starting backup..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformBackupBackgroundAsync(exportRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("import")]
+        [Authorize(Permissions.PlatformImport)]
+        public ActionResult<PlatformImportPushNotification> ProcessImport([FromBody] PlatformImportExportRequest importRequest)
+        {
+            var notification = new PlatformImportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform restore task",
+                Description = "starting restore..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformRestoreBackgroundAsync(importRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("exortimport/tasks/{jobId}/cancel")]
+        public ActionResult Cancel([FromRoute] string jobId)
+        {
+            BackgroundJob.Delete(jobId);
+            return Ok();
+        }
+
+        [HttpGet]
+        [Route("export/download/{fileName}")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult DownloadExportFile([FromRoute] string fileName)
+        {
+            var localPath = GetSafeFullPath(_platformOptions.DefaultExportFolder, fileName);
+
+            //Load source data only from local file system
+            using (System.IO.File.Open(localPath, FileMode.Open))
path: src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformBackupRestoreController.cs
user: login: github-advanced-security[bot]
body: ## Uncontrolled data used in path expression

This path depends on a [user-provided value](1).

[Show more details](https://github.com/VirtoCommerce/vc-platform/security/code-scanning/60)
created_at: 2025-03-26T12:24:59Z
author_association: NONE
diff_hunk: @@ -0,0 +1,220 @@
+using System;
+using System.IO;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Hangfire;
+using Hangfire.Server;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Options;
+using VirtoCommerce.Platform.Core;
+using VirtoCommerce.Platform.Core.Exceptions;
+using VirtoCommerce.Platform.Core.ExportImport;
+using VirtoCommerce.Platform.Core.ExportImport.PushNotifications;
+using VirtoCommerce.Platform.Core.PushNotifications;
+using VirtoCommerce.Platform.Core.Security;
+using VirtoCommerce.Platform.Core.Settings;
+using VirtoCommerce.Platform.Hangfire;
+
+using Permissions = VirtoCommerce.Platform.Core.PlatformConstants.Security.Permissions;
+
+namespace VirtoCommerce.Platform.Web.Controllers.Api
+{
+    [Route("api/platform")]
+    [ApiExplorerSettings(IgnoreApi = true)]
+    [Authorize]
+    public class PlatformBackupRestoreController : Controller
+    {
+        private readonly IPlatformExportImportManager _platformExportManager;
+        private readonly IPushNotificationManager _pushNotifier;
+        private readonly ISettingsManager _settingsManager;
+        private readonly IUserNameResolver _userNameResolver;
+        private readonly PlatformOptions _platformOptions;
+        private readonly IHttpClientFactory _httpClientFactory;
+
+        private static readonly object _lockObject = new();
+
+        public PlatformBackupRestoreController(
+            IPlatformExportImportManager platformExportManager,
+            IPushNotificationManager pushNotifier,
+            ISettingsManager settingManager,
+            IUserNameResolver userNameResolver,
+            IOptions<PlatformOptions> options,
+            IHttpClientFactory httpClientFactory)
+        {
+            _platformExportManager = platformExportManager;
+            _pushNotifier = pushNotifier;
+            _settingsManager = settingManager;
+            _userNameResolver = userNameResolver;
+            _httpClientFactory = httpClientFactory;
+            _platformOptions = options.Value;
+        }
+
+
+        [HttpPost]
+        [Route("export")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult<PlatformExportPushNotification> ProcessExport([FromBody] PlatformImportExportRequest exportRequest)
+        {
+            var notification = new PlatformExportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform backup task",
+                Description = "starting backup..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformBackupBackgroundAsync(exportRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("import")]
+        [Authorize(Permissions.PlatformImport)]
+        public ActionResult<PlatformImportPushNotification> ProcessImport([FromBody] PlatformImportExportRequest importRequest)
+        {
+            var notification = new PlatformImportPushNotification(_userNameResolver.GetCurrentUserName())
+            {
+                Title = "Platform restore task",
+                Description = "starting restore..."
+            };
+            _pushNotifier.Send(notification);
+
+            var jobId = BackgroundJob.Enqueue(() => PlatformRestoreBackgroundAsync(importRequest, notification, JobCancellationToken.Null, null));
+            notification.JobId = jobId;
+
+            return Ok(notification);
+        }
+
+        [HttpPost]
+        [Route("exortimport/tasks/{jobId}/cancel")]
+        public ActionResult Cancel([FromRoute] string jobId)
+        {
+            BackgroundJob.Delete(jobId);
+            return Ok();
+        }
+
+        [HttpGet]
+        [Route("export/download/{fileName}")]
+        [Authorize(Permissions.PlatformExport)]
+        public ActionResult DownloadExportFile([FromRoute] string fileName)
+        {
+            var localPath = GetSafeFullPath(_platformOptions.DefaultExportFolder, fileName);
+
+            //Load source data only from local file system
+            using (System.IO.File.Open(localPath, FileMode.Open))
+            {
+                var provider = new FileExtensionContentTypeProvider();
+                if (!provider.TryGetContentType(localPath, out var contentType))
+                {
+                    contentType = "application/octet-stream";
+                }
+                return PhysicalFile(localPath, contentType);
+            }
+        }
+
+
+        public async Task PlatformRestoreBackgroundAsync(PlatformImportExportRequest importRequest, PlatformImportPushNotification pushNotification, IJobCancellationToken cancellationToken, PerformContext context)
+        {
+            void progressCallback(ExportImportProgressInfo x)
+            {
+                pushNotification.Path(x);
+                pushNotification.JobId = context.BackgroundJob.Id;
+                _pushNotifier.Send(pushNotification);
+            }
+
+            var now = DateTime.UtcNow;
+            try
+            {
+                var cancellationTokenWrapper = new JobCancellationTokenWrapper(cancellationToken);
+
+                var localPath = GetSafeFullPath(_platformOptions.LocalUploadFolderPath, importRequest.FileUrl);
+
+                //Load source data only from local file system
+                using (var stream = new FileStream(localPath, FileMode.Open))
path: src/VirtoCommerce.Platform.Web/Controllers/Api/PlatformBackupRestoreController.cs
user: login: github-advanced-security[bot]
body: ## Uncontrolled data used in path expression

This path depends on a [user-provided value](1).
This path depends on a [user-provided value](2).

[Show more details](https://github.com/VirtoCommerce/vc-platform/security/code-scanning/61)
created_at: 2025-03-26T12:24:59Z
author_association: NONE
diff_hunk: @@ -152,10 +152,10 @@
         }
       },
       "export-main": {
-        "title": "Data export",
+        "title": "Data backup",
         "labels": {
           "platform-entries": "Platform entries",
-          "choose-modules": "Choose modules to export",
+          "choose-modules": "Choose modules to backup",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Choose modules to back up
created_at: 2025-03-26T12:47:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Dynamic properties",
       "security": "Security",
       "modules": "Modules",
-      "export-import": "Export & Import",
+      "export-import": "Backup & Restore",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/en.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Backup and restore
created_at: 2025-03-26T13:00:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Propiedades dinámicas",
       "security": "Seguridad",
       "modules": "Módulos",
-      "export-import": "Exportar e Importar",
+      "export-import": "Copia de seguridad y Restauración",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/es.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Copia de seguridad y restauración
created_at: 2025-03-26T13:03:59Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Propriétés dynamiques",
       "security": "Sécurité",
       "modules": "Modules",
-      "export-import": "Exporter & Importer",
+      "export-import": "Sauvegarde et Restauration",
       "user-profile": "Profil utilisateur",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/fr.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Sauvegarde et restauration
created_at: 2025-03-26T13:11:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Proprietà dinamiche",
       "security": "Sicurezza",
       "modules": "Moduli",
-      "export-import": "Esporta & Importa",
+      "export-import": "Backup e Ripristino",
       "user-profile": "Profilo utente",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/it.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Backup e ripristino
created_at: 2025-03-26T13:12:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Właściwości dynamiczne",
       "security": "Bezpieczeństwo",
       "modules": "Moduły",
-      "export-import": "Eksport i Import",
+      "export-import": "Kopia zapasowa i Przywracanie",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pl.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Kopia zapasowa i przywracanie
created_at: 2025-03-26T13:15:03Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Propriedades dinâmicas",
       "security": "Segurança",
       "modules": "Módulos",
-      "export-import": "Exportar e Importar",
+      "export-import": "Backup e Restauração",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/pt.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Backup e restauração
created_at: 2025-03-26T13:15:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -10,7 +10,7 @@
       "dynamic-properties": "Динамические свойства",
       "security": "Безопасность",
       "modules": "Модули",
-      "export-import": "Экспорт и импорт",
+      "export-import": "Резервное копирование и Восстановление",
path: src/VirtoCommerce.Platform.Web/wwwroot/Localizations/ru.VirtoCommerce.Platform.json
user: login: Maria-Volkova-Tula
body: Резервное копирование и восстановление
created_at: 2025-03-26T13:16:10Z
author_association: CONTRIBUTOR

PR comments:
user: login: sonarqubecloud[bot]
created_at: 2025-03-31T07:54:14Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-platform&pullRequest=2904) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=VirtoCommerce_vc-platform&pullRequest=2904&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=VirtoCommerce_vc-platform&pullRequest=2904&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=VirtoCommerce_vc-platform&pullRequest=2904&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=VirtoCommerce_vc-platform&pullRequest=2904&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=VirtoCommerce_vc-platform&pullRequest=2904&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-platform&pullRequest=2904)


author_association: NONE