{
   Double Commander
   -------------------------------------------------------------------------
   Localization core unit

   Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru)

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program. If not, see <http://www.gnu.org/licenses/>.
}

unit uLng;

{$mode objfpc}{$H+}

interface
uses
  LResources;
resourcestring
  // File operations.
  rsMsgNotDelete = 'Can not delete file %s';
  rsMsgCannotDeleteDirectory = 'Cannot delete directory %s';
  rsMsgCannotOverwriteDirectory = 'Cannot overwrite directory "%s" with non-directory "%s"';
  rsMsgCannotCopySpecialFile = 'Cannot copy special file %s';
  rsMsgErrCannotMoveDirectory = 'Cannot move directory %s';
  rsMsgErrDirExists = 'Directory %s exists!';
  rsMsgErrRename = 'Cannot rename file %s to %s';
  rsMsgErrCannotMoveFile = 'Cannot move file %s';
  rsMsgErrCannotCopyFile = 'Cannot copy file %s to %s';
  rsMsgFileExistsOverwrite = 'Overwrite:';
  rsMsgFileExistsWithFile = 'With file:';
  rsMsgFileExistsFileInfo = '%s bytes, %s';
  rsMsgFileExistsRwrt = 'File %s exists, overwrite?';
  rsMsgFileChangedSave = 'File %s changed, save?';
  rsMsgReplaceThisText = 'Do you want to replace this text?';
  rsMsgCannotChangeTarget = 'You cannot change a target location!';
  rsMsgCancelOperation = 'Are you sure that you want to cancel this operation?';
  rsMsgFileReloadWarning = 'Are you sure you want to reload the current file and lose the changes?';
  rsMsgFolderExistsRwrt = 'Folder %s exists, merge?';
  rsMsgFileReadOnly = 'File %s is marked as read-only/hidden/system. Delete it?';
  rsMsgNewFile = 'New file';
  rsMsgDelFlDr = 'Delete %d selected files/directories?';
  rsMsgDelSel = 'Delete selected "%s"?';
  rsMsgTestArchive = 'Do you want to test selected archives?';
  rsMsgVerifyChecksum = 'Do you want to verify selected checksums?';
  rsMsgObjectNotExists = 'Object does not exist!';
  // 12.05.2009 - another message, when deleting to trash
  rsMsgDelFlDrT = 'Delete %d selected files/directories into trash can?';
  rsMsgDelSelT = 'Delete selected "%s" into trash can?';
  rsMsgDelToTrashForce = 'Can not delete "%s" to trash! Delete directly?';
  rsMsgFileNotFound = 'File "%s" not found.';
  // ---
  rsMsgVerify = 'VERIFICATION:';
  rsMsgVerifyWrong = 'The target file is corrupted, checksum mismatch!';
  // ---
  rsMsgWipeFlDr = 'Wipe %d selected files/directories?';
  rsMsgWipeSel = 'Wipe selected "%s"?';
  rsMsgCpFlDr = 'Copy %d selected files/directories?';
  rsMsgCpSel = 'Copy selected "%s"?';
  rsMsgRenFlDr = 'Rename/move %d selected files/directories?';
  rsMsgRenSel = 'Rename/move selected "%s"?';
  rsMsgErrForceDir = 'Can not create directory %s!';
  rsMsgSelectedInfo = 'Selected: %s of %s, files: %d of %d, folders: %d of %d';
  rsMsgCloseLockedTab = 'This tab (%s) is locked! Close anyway?';
  rsMsgTabForOpeningInNewTab = 'This tab (%s) is locked! Open directory in another tab?';
  rsSpaceMsg = 'Files: %d, Dirs: %d, Size: %s (%s bytes)';
  rsSelectDir = 'Select a directory';
  rsMarkPlus = 'Select mask';
  rsMarkMinus = 'Unselect mask';
  rsMaskInput = 'Input mask:';
  rsMsgPopUpHotDelete = '&Delete %s';
  rsMsgDiskNotAvail = 'Disk is not available';
  rsMsgChDirFailed = 'Change current directory to "%s" failed!';
  rsMsgNoFreeSpaceCont = 'No enough free space on target drive, Continue?';
  rsMsgNoFreeSpaceRetry = 'No enough free space on target drive, Retry?';
  rsMsgSetVolumeLabel = 'Set volume label';
  rsMsgVolumeLabel = 'Volume label:';
  rsMsgRestartForApplyChanges = 'Please, restart Double Commander in order to apply changes';
  rsMsgEnterName = 'Enter name:';
  rsMsgEnterFileExt = 'Enter file extension:';
  rsMsgDefaultCustomActionName = 'Custom action';
  rsMsgSelectExecutableFile = 'Select executable file for';
  rsMsgWithActionWith = 'with';
  rsMsgFollowSymlink = 'Follow symlink "%s"?';
  rsMsgFileSizeTooBig = 'The file size of "%s" is too big for destination file system!';
  rsMsgCloseAllInActiveTabs = 'Remove all inactive tabs?';
  rsMsgErrRegExpSyntax = 'Syntax error in regular expression!';
  rsMsgNoFilesSelected = 'No files selected.';
  rsMsgTooManyFilesSelected = 'Too many files selected.';
  rsMsgInvalidSelection = 'Invalid selection.';
  rsMsgNotImplemented = 'Not implemented.';
  rsMsgInvalidFilename = 'Invalid filename';
  rsMsgInvalidPath = 'Invalid path';
  rsMsgInvalidPathLong = 'Path %s contains forbidden characters.';
  rsMsgSelectOnlyCheckSumFiles = 'Please select only checksum files!';
  rsMsgPresetAlreadyExists = 'Preset "%s" already exists. Overwrite?';
  rsMsgPresetConfigDelete = 'Are you sure you want to delete preset "%s"?';
  rsMsgVolumeSizeEnter = 'Please enter the volume size:';
  rsFilterAnyFiles = 'Any files';
  rsFilterDCToolTipFiles = 'DC Tooltip files';
  rsFilterToolbarFiles = 'DC Toolbar files';
  rsFilterXmlConfigFiles = '.xml Config files';
  rsFilterTCToolbarFiles = 'TC Toolbar files';
  rsFilterExecutableFiles = 'Executables files';
  rsFilterIniConfigFiles = '.ini Config files';
  rsFilterLegacyTabFiles = 'Legacy DC .tab files';
  rsFilterDirectoryHotListFiles = 'Directory Hotlist files';
  rsFilterArchiverConfigFiles = 'Archiver config files';
  rsFilterPluginFiles = 'Plugin files';
  rsFilterLibraries = 'Library files';
  rsFilterProgramsLibraries = 'Programs and Libraries';

  // Archiver section.
  rsMsgArchiverCustomParams = 'Additional parameters for archiver command-line:';
  rsOptArchiverArchiver = 'Select archiver executable';
  rsOptArchiverConfirmDelete = 'Are you sure you want to delete: "%s"?';
  rsOptArchiverImportFile = 'Select the file to import archiver configuration(s)';
  rsOptArchiverWhereToSave = 'Enter location and filename where to save archiver configuration';
  rsOptArchiverDefaultExportFilename = 'Exported Archiver Configuration';
  rsOptArchiverImportCaption = 'Import archiver configuration';
  rsOptArchiverImportPrompt = 'Select the one(s) you want to import';
  rsOptArchiverImportDone = 'Importation of %d elements from file "%s" completed.';
  rsOptArchiverExportCaption = 'Export archiver configuration';
  rsOptArchiverExportPrompt = 'Select the one(s) you want to export';
  rsOptArchiverExportDone = 'Exportation of %d elements to file "%s" completed.';
  rsOptArchiverProgramL = 'Archive Program (long name)';
  rsOptArchiverProgramS = 'Archive Program (short name)';
  rsOptArchiverArchiveL = 'Archive File (long name)';
  rsOptArchiverArchiveS = 'Archive file (short name)';
  rsOptArchiverFileListL = 'Filelist (long names)';
  rsOptArchiverFileListS = 'Filelist (short names)';
  rsOptArchiverSingleFProcess = 'Single filename to process';
  rsOptArchiverErrorLevel = 'errorlevel';
  rsOptArchiverChangeEncoding = 'Change Archiver Listing Encoding';
  rsOptArchiverTargetSubDir = 'Target subdirecory';
  rsOptArchiverAdditonalCmd = 'Mode dependent, additional command';
  rsOptArchiverAddOnlyNotEmpty = 'Add if it is non-empty';
  rsOptArchiverQuoteWithSpace = 'Quote names with spaces';
  rsOptArchiverQuoteAll = 'Quote all names';
  rsOptArchiverJustName = 'Use name only, without path';
  rsOptArchiverJustPath = 'Use path only, without name';
  rsOptArchiverUseAnsi = 'Use ANSI encoding';
  rsOptArchiverUseUTF8 = 'Use UTF8 encoding';
  rsOptArchiveConfigureSaveToChange = 'To change current editing archive configuration, either APPLY or DELETE current editing one';

  // Font
  rsFontUsageMain = 'Main &Font';
  rsFontUsageEditor = '&Editor Font';
  rsFontUsageViewer = '&Viewer Font';
  rsFontUsageViewerBook = 'Viewer&Book Font';
  rsFontUsageLog = '&Log Font';
  rsFontUsageConsole = '&Console Font';
  rsFontUsagePathEdit = 'Path Font';
  rsFontUsageFunctionButtons = 'Function Buttons Font';
  rsFontUsageSearchResults = 'Search Results Font';
  rsFontUsageTreeViewMenu = 'Tree View Menu Font';
  rsFontUsageStatusBar = 'Status Bar Font';

  // Tooltip section
  rsOptTooltipConfigureSaveToChange = 'To change file type tooltip configuration, either APPLY or DELETE current editing one';
  rsOptToolTipsFileTypeName = 'Tooltip file type name';
  rsToolTipModeList = 'Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only';
  rsToolTipHideTimeOutList = 'System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide';
  rsOptAddingToolTipFileType = 'Adding new tooltip file type';
  rsOptRenamingToolTipFileType = 'Renaming tooltip file type';
  rsOptToolTipFileType = 'Tooltip file type name:';
  rsOptToolTipFileTypeDefaultExportFilename = 'Exported tooltip file type configuration';
  rsOptToolTipFileTypeWhereToSave = 'Enter location and filename where to save tooltip file type configuration';
  rsOptToolTipFileTypeAlreadyExists = '"%s" already exists!';
  rsOptToolTipFileTypeConfirmDelete = 'Are you sure you want to delete: "%s"?';
  rsOptToolTipFileTypeImportCaption = 'Import tooltip file type configuration';
  rsOptToolTipFileTypeImportPrompt = 'Select the one(s) you want to import';
  rsOptToolTipFileTypeImportFile = 'Select the file to import tooltip file type configuration(s)';
  rsOptToolTipFileTypeImportDone = 'Importation of %d elements from file "%s" completed.';
  rsOptToolTipFileTypeExportPrompt = 'Select the one(s) you want to export';
  rsOptToolTipFileTypeExportCaption = 'Export tooltip file type configuration';
  rsOptToolTipFileTypeExportDone = 'Exportation of %d elements to file "%s" completed.';

  rsMsgMasterPassword = 'Main Password';
  rsMsgMasterPasswordEnter = 'Please enter the main password:';
  rsMsgWrongPasswordTryAgain = 'Wrong password!'#13'Please try again!';
  rsMsgPasswordEnter = 'Please enter the password:';
  rsMsgPasswordVerify = 'Please re-enter the password for verification:';
  rsMsgPasswordDiff = 'Passwords are different!';
  rsMsgKeyTransformTime = 'The key transformation took %f seconds.';
  rsMsgKeyTransformError = 'The key transformation failed (error code %d)!';
  rsMsgUserName = 'User name:';
  rsMsgPassword = 'Password:';
  rsMsgAccount = 'Account:';
  rsMsgUserNameFirewall = 'User name (Firewall):';
  rsMsgPasswordFirewall = 'Password (Firewall):';
  rsMsgTargetDir = 'Target path:';
  rsMsgURL = 'URL:';
  rsMsgLoadingFileList = 'Loading file list...';
  rsMsgNoFiles = 'No files';
  rsMsgErrSetAttribute = 'Can not set attributes for "%s"';
  rsMsgErrSetDateTime = 'Can not set date/time for "%s"';
  rsMsgErrSetOwnership = 'Can not set owner/group for "%s"';
  rsMsgErrSetPermissions = 'Can not set permissions for "%s"';
  rsMsgErrSetXattribute = 'Can not set extended attributes for "%s"';
  rsMsgErrDateNotSupported = 'Date %s is not supported';
  rsMsgErrSaveFile = 'Cannot save file';
  rsMsgErrCanNotConnect = 'Can not connect to server: "%s"';
  rsMsgErrSaveAssociation = 'Can not save association!';
  rsMsgFileOperationsActive = 'File operations active';
  rsMsgFileOperationsActiveLong = 'Some file operations have not yet finished. Closing Double Commander may result in data loss.';
  rsMsgConfirmQuit = 'Are you sure you want to quit?';
  rsMsgCanNotCopyMoveItSelf = 'You can not copy/move a file "%s" to itself!';
  rsMsgTabRenameCaption = 'Rename tab';
  rsMsgTabRenamePrompt = 'New tab name:';
  rsMsgInvalidPlugin = 'This is not a valid plugin!';
  rsMsgInvalidPluginArchitecture = 'This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!';
  rsMsgErrCreateFileDirectoryExists = 'There already exists a directory named "%s".';
  rsMsgDeletePartiallyCopied = 'Delete the partially copied file ?';
  rsMsgInvalidCommandLine = 'Error in command line';
  rsMsgCofirmUserParam = 'Confirmation of parameter';
  rsMsgAskQuoteOrNot = 'Do you want to enclose between quotes?';
  rsMsgInvalidQuoting = 'Invalid quoting';
  rsMsgErrorInContextMenuCommand = 'Error in context menu command';
  rsMsgErrorLoadingConfiguration = 'Error when loading configuration';
  rsMsgInvalidFormatOfConfigurationFile = 'Invalid format of configuration file';
  rsDefaultSuffixDroppedText = '_DroppedText';
  rsDefaultSuffixDroppedTextRichtextFilename = '_DroppedRichtext';
  rsDefaultSuffixDroppedTextHTMLFilename = '_DroppedHTMLtext';
  rsDefaultSuffixDroppedTextUnicodeUTF16Filename = '_DroppedUnicodeUTF16text';
  rsDefaultSuffixDroppedTextUnicodeUTF8Filename = '_DroppedUnicodeUTF8text';
  rsDefaultSuffixDroppedTextSimpleFilename = '_DroppedSimpleText';
  rsDragAndDropTextFormat = 'Rich Text Format;HTML Format;Unicode Format;Simple Text Format';
  rsCaptionForAskingFilename = 'Enter filename, with extension, for dropped text';
  rsMsgPromptAskingFilename = 'Filename for dropped text:';
  rsCaptionForTextFormatToImport = 'Text format to import';
  rsMsgForTextFormatToImport = 'Select the text format to import';
  rsMsgUserDidNotSetExtension = '<NO EXT>';
  rsMsgUserDidNotSetName = '<NO NAME>';
  rsMsgCommandNotFound = 'Command not found! (%s)';
  rsMsgProblemExecutingCommand = 'Problem executing command (%s)';
  rsMsgCopyBackward = 'The file %s has changed. Do you want to copy it backward?';
  rsMsgCouldNotCopyBackward = 'Could not copy backward - do you want to keep the changed file?';
  rsMsgFilePathOverMaxPath = 'The target name length (%d) is more than %d characters!' + #13 + '%s' + #13 + 'Most programs will not be able to access a file/directory with such a long name!';
  rsExtsClosedBracketNoFound = '"]" not found in line %s';
  rsExtsCommandWithNoExt = 'No extension defined before command "%s". It will be ignored.';
  rsMsgTerminalDisabled = 'Built-in terminal window disabled. Do you want to enable it?';

  //Hot Dir related
  rsMsgHotDirWhatToDelete = 'Do you want to delete all elements inside the sub-menu [%s]?'+#$0A+'Answering NO will delete only menu delimiters but will keep element inside sub-menu.';
  rsMsgHotDirAddThisDirectory = 'Add current dir: ';
  rsMsgHotDirAddSelectedDirectory = 'Add selected dir: ';
  rsMsgHotDirReAddSelectedDirectory = 'Re-Add selected dir: ';
  rsMsgHotDirReAddThisDirectory = 'Re-Add current dir: ';
  rsMsgHotDirAddSelectedDirectories = 'Add %d selected dirs';
  rsMsgHotDirConfigHotlist = 'Configuration of Directory Hotlist';
  rsMsgHotDirDeleteAllEntries = 'Are you sure you want to remove all entries of your Directory Hotlist? (There is no "undo" to this action!)';
  rsMsgHotDirName = 'Hotdir name';
  rsMsgHotDirPath = 'Hotdir path';
  rsMsgHotDirJustPath = '&Path:';
  rsMsgHotDirTarget = 'Hotdir target';
  rsMsgHotDirSubMenuName = 'Submenu name';
  rsMsgHotDirSimpleName = '&Name:';
  rsMsgHotDirSimpleSeparator = '(separator)';
  rsMsgHotDirSimpleMenu = 'Menu &name:';
  rsMsgHotDirSimpleEndOfMenu = '(end of sub menu)';
  rsMsgHotDirSimpleCommand = 'Command:';
  rsMsgHotDirCommandName = 'Do command';
  rsMsgHotDirCommandSample = 'cm_somthing';
  rsMsgHotDirDemoName = 'This is hot dir named ';
  rsMsgHotDirDemoPath = 'This will change active frame to the following path:';
  rsMsgHotDirDemoCommand = 'This will execute the following command:';
  rsMsgHotDirDemoTarget = 'And inactive frame would change to the following path:';
  rsMsgHotDirLocateHotlistFile = 'Locate ".hotlist" file to import';
  rsMsgHotDirWhereToSave = 'Enter location and filename where to save a Directory Hotlist file';
  rsMsgHotDirRestoreWhat = 'Enter location and filename of Directory Hotlist to restore';
  rsMsgHotDirImportall = 'Import all!';
  rsMsgHotDirImportSel = 'Import selected';
  rsMsgHotDirImportHotlist = 'Import Directory Hotlist - Select the entries you want to import';
  rsMsgHotDirExportall = 'Export all!';
  rsMsgHotDirExportSel = 'Export selected';
  rsMsgHotDirExportHotlist = 'Export Directory Hotlist - Select the entries you want to export';
  rsMsgHotDirNbNewEntries = 'Number of new entries: %d';
  rsMsgHotDirTotalExported = 'Total entries exported: ';
  rsMsgHotDirErrorExporting = 'Error exporting entries...';
  rsMsgHotDirNothingToExport = 'Nothing selected to export!';
  rsMsgHotDirTipSpecialDirBut = 'Some functions to select appropriate path relative, absolute, windows special folders, etc.';
  rsMsgHotDirTipOrderPath = 'Determine if you want the active frame to be sorted in a specified order after changing directory';
  rsMsgHotDirTipOrderTarget = 'Determine if you want the not active frame to be sorted in a specified order after changing directory';
  rsMsgHotDirTotalBackuped = 'Total entries saved: %d'+#$0A+#$0A+'Backup filename: %s';
  rsMsgHotDirErrorBackuping = 'Error backuping entries...';
  rsHotDirWarningAbortRestoreBackup = 'Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.'+#$0A+#$0A+
                                      'Are you sure you want to proceed?';
  rsHotDirForceSortingOrderChoices = 'none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9';

  //Special dir related
  rsMsgSpecialDirUseDC = 'Use Double Commander special path...';
  rsMsgSpecialDirUseTC = 'Use Windows special folder (TC)...';
  rsMsgSpecialDirUseOther = 'Use other Windows special folder...';
  rsMsgSpecialDirEnvVar = 'Use environment variable...';
  rsMsgSpecialDirMkDCRel = 'Make relative to Double Commander special path...';
  rsMsgSpecialDirMkTCTel = 'Make relative to Windows special folder (TC)...';
  rsMsgSpecialDirMkWnRel = 'Make relative to other Windows special folder...';
  rsMsgSpecialDirMkEnvRel = 'Make relative to environment variable...';
  rsMsgSpecialDirMkAbso = 'Make path absolute';
  rsMsgSpecialDirAddActi = 'Add path from active frame';
  rsMsgSpecialDirAddNonActi = 'Add path from inactive frame';
  rsMsgSpecialDirBrowsSel = 'Browse and use selected path';

  rsMsgSpecialDir = 'Special Dirs';
  rsMsgSpecialDirGotoDC = 'Go to Double Commander special path...';
  rsMsgSpecialDirGotoTC = 'Go to Windows special folder (TC)...';
  rsMsgSpecialDirGotoOther = 'Go to other Windows special folder...';
  rsMsgSpecialDirGotoEnvVar = 'Go to environment variable...';
  rsMsgSpecialDirUseHotDir = 'Use hotdir path';
  rsMsgSpecialDirMakeRelToHotDir = 'Make relative to hotdir path';

  //Favorite Tabs related
  rsMsgFavoriteTabsEnterName = 'Enter a name for this new Favorite Tabs entry:';
  rsMsgFavoriteTabsEnterNameTitle = 'Saving a new Favorite Tabs entry';
  rsMsgFavoriteTabsSubMenuName = 'Submenu name';
  rsMsgFavoriteTabsImportSubMenuName = 'Legacy tabs imported';
  rsMsgFavoriteTabsDragHereEntry = 'Drag here other entries';
  rsMsgFavortieTabsSaveOverExisting = 'Save current tabs over existing Favorite Tabs entry';
  rsOptFavoriteTabsWhereToAddInList = 'Add at beginning;Add at the end;Alphabetical sort';
  rsMsgFavoriteTabsThisWillLoadFavTabs = 'This will load the Favorite Tabs: "%s"';
  rsMsgFavoriteTabsDeleteAllEntries = 'Are you sure you want to remove all entries of your Favorite Tabs? (There is no "undo" to this action!)';
  rsTitleRenameFavTabs = 'Rename Favorite Tabs';
  rsMsgRenameFavTabs = 'Enter new friendly name for this Favorite Tabs';
  rsTitleRenameFavTabsMenu = 'Rename Favorite Tabs sub-menu';
  rsMsgRenameFavTabsMenu = 'Enter new name for this menu';
  rsMsgFavoriteTabsImportedSuccessfully = 'Number of file(s) imported successfully: %d on %d';
  rsMsgFavoriteTabsExportedSuccessfully = 'Number of Favorite Tabs exported successfully: %d on %d';
  rsMsgFavoriteTabsModifiedNoImport = 'Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?';
  rsMsgFavoriteTabsSimpleMode = 'Keep saving dir history with Favorite Tabs:';
  rsMsgFavoriteTabsExtraMode = 'Default extra setting for save dir history for new Favorite Tabs:';
  rsTabsActionOnDoubleClickChoices = 'Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu';
  rsFavTabsPanelSideSelection = 'Left;Right;Active;Inactive;Both;None';
  rsFavTabsSaveDirHistory = 'No;Yes';
  rsMsgFavoriteTabsImportTitle = 'Select .tab file(s) to import (could be more than one at the time!)';

  //Total Commander related message
  rsMsgLocateTCExecutable = 'Locate TC executable file (totalcmd.exe or totalcmd64.exe)';
  rsMsgLocateTCConfiguation = 'Locate TC configuration file (wincmd.ini)';
  rsDefaultImportedTCToolbarHint = 'Imported TC toolbar';
  rsDefaultImportedDCToolbarHint = 'Imported DC toolbar';
  rsFilenameExportedTCBarPrefix = 'Exported_from_DC';
  rsNoEquivalentInternalCommand = 'No internal equivalent command';

  // Locked by another process
  rsMsgProcessId = 'PID: %d';
  rsMsgApplicationName = 'Description: %s';
  rsMsgExecutablePath = 'Executable: %s';
  rsMsgOpenInAnotherProgram = 'The action cannot be completed because the file is open in another program:';
  rsMsgTerminateProcess = 'WARNING: Terminating a process can cause undesired results including loss of data and system instability.' + #32 +
                          'The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?';

  // for context menu
  rsMnuActions = 'Actions';
  rsMnuOpen = 'Open';
  rsMnuView = 'View';
  rsMnuEdit = 'Edit';
  rsMnuiCloudDriveDownloadNow = 'Download Now';
  rsMnuiCloudDriveRemoveDownload = 'Remove Download';
  rsMnuOpenWith = 'Open with';
  rsMnuOpenWithOther = 'Other...';
  rsMenuMacOSShare = 'Share...';
  rsMenuMacOSGrantPermissionToSupportFinderTags = 'Grant "Full Disk Access" permission to support Finder Tags...';
  rsMenuMacOSEditFinderTags = 'Edit Finder Tags...';
  rsMenuMacOSAddFinderTag = 'Add "%s"';
  rsMenuMacOSRemoveFinderTag = 'Remove "%s"';
  rsMnuMount = 'Mount';
  rsMnuUmount = 'Unmount';
  rsMnuNoMedia = 'No media available';
  rsMnuEject = 'Eject';
  rsMnuSortBy = 'Sort by';
  rsMnuNew = 'New';
  rsMnuRestore = 'Restore';
  rsMnuPackHere = 'Pack here...';
  rsMnuExtractHere = 'Extract here...';
  rsOpenWithMacOSFilter = 'Applications (*.app)|*.app|All files (*)|*';
  // for main menu
  rsMnuCreateShortcut = 'Create Shortcut...';
  rsMnuDisconnectNetworkDrive = 'Disconnect Network Drive...';
  // for dock emnu
  rsMnuNewWindow = 'New Window';
  // for content plugins menu
  rsMnuContentDefault = '<Default>';
  rsMnuContentOctal = 'Octal';
  // wcx module messages
  rsMsgSelLocNextVol = 'Please select location of next volume';
  rsMsgNextVolUnpack = 'Next volume will be unpacked';
  // wcx module errors messages
  rsMsgErrEndArchive = 'No more files in archive';
  rsMsgErrNoMemory = 'Not enough memory';
  rsMsgErrBadData = 'Data is bad';
  rsMsgErrBadArchive = 'CRC error in archive data';
  rsMsgErrUnknownFormat = 'Archive format unknown';
  rsMsgErrEOpen = 'Cannot open existing file';
  rsMsgErrECreate = 'Cannot create file';
  rsMsgErrEClose = 'Error closing file';
  rsMsgErrERead = 'Error reading from file';
  rsMsgErrEWrite = 'Error writing to file';
  rsMsgErrSmallBuf = 'Buffer too small';
  rsMsgErrEAborted = 'Function aborted by user';
  rsMsgErrNoFiles = 'No files found';
  rsMsgErrTooManyFiles = 'Too many files to pack';
  rsMsgErrNotSupported = 'Function not supported!';
  rsMsgErrInvalidLink = 'Invalid link';
  // Vfs
  rsVfsNetwork = 'Network';
  rsVfsRecycleBin = 'Recycle Bin';

  // Buttons.
  rsDlgButtonOK = '&OK';
  rsDlgButtonNo = '&No';
  rsDlgButtonYes = '&Yes';
  rsDlgButtonCancel = '&Cancel';
  rsDlgButtonNone = 'Non&e';
  rsDlgButtonAppend = 'A&ppend';
  rsDlgButtonResume = '&Resume';
  rsDlgButtonRename = 'R&ename';
  rsDlgButtonCopyInto = '&Merge';
  rsDlgButtonCopyIntoAll = 'Mer&ge All';
  rsDlgButtonOverwrite = '&Overwrite';
  rsDlgButtonOverwriteAll = 'Overwrite &All';
  rsDlgButtonOverwriteOlder = 'Overwrite All Ol&der';
  rsDlgButtonOverwriteSmaller = 'Overwrite All S&maller';
  rsDlgButtonOverwriteLarger = 'Overwrite All &Larger';
  rsDlgButtonAutoRenameSource = 'A&uto-rename source files';
  rsDlgButtonAutoRenameTarget = 'Auto-rename tar&get files';
  rsDlgButtonSkip = '&Skip';
  rsDlgButtonSkipAll = 'S&kip All';
  rsDlgButtonIgnore = 'Ig&nore';
  rsDlgButtonIgnoreAll = 'I&gnore All';
  rsDlgButtonAll = 'A&ll';
  rsDlgButtonRetry = 'Re&try';
  rsDlgButtonAbort = 'Ab&ort';
  rsDlgButtonOther = 'Ot&her';
  rsDlgButtonRetryAdmin = 'As Ad&ministrator';
  rsDlgButtonUnlock = '&Unlock';
  rsDlgButtonCompare = 'Compare &by content';

  rsDlgButtonContinue = '&Continue';
  rsDlgButtonExitProgram = 'E&xit program';

  // Log file
  rsMsgLogSuccess = 'Done: ';
  rsMsgLogError = 'Error: ';
  rsMsgLogInfo = 'Info: ';
  rsMsgLogCopy = 'Copy file %s';
  rsMsgLogMove = 'Move file %s';
  rsMsgLogDelete = 'Delete file %s';
  rsMsgLogWipe = 'Wipe file %s';
  rsMsgLogLink = 'Create link %s';
  rsMsgLogSymLink = 'Create symlink %s';
  rsMsgLogMkDir = 'Create directory %s';
  rsMsgLogRmDir = 'Remove directory %s';
  rsMsgLogWipeDir = 'Wipe directory %s';
  rsMsgLogPack = 'Pack to file %s';
  rsMsgLogExtract = 'Extract file %s';
  rsMsgLogTest = 'Test file integrity %s';
  rsMsgLogExtCmdLaunch = 'Launch external';
  rsMsgLogExtCmdResult = 'Result external';
  rsMsgLogProgramStart = 'Program start';
  rsMsgLogProgramShutdown = 'Program shutdown';
  rsMsgExitStatusCode = 'Exit status:';

  rsSearchResult = 'Search result';
  rsShowHelpFor = '&Show help for %s';
  rsClipboardContainsInvalidToolbarData = 'Clipboard doesn''t contain any valid toolbar data.';

  //Panel Color Configuration
  rsMsgPanelPreview = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.';

  // File operations dialog
  rsDlgCp = 'Copy file(s)';
  rsDlgMv = 'Move file(s)';
  rsDlgOpPause = 'Pau&se';
  rsDlgOpStart = '&Start';
  rsDlgQueue = 'Queue';
  rsDlgSpeed = 'Speed %s/s';
  rsDlgSpeedTime = 'Speed %s/s, time remaining %s';

  // File operations
  rsFileOpDirectoryExistsOptions = 'Ask;Merge;Skip';
  rsFileOpFileExistsOptions = 'Ask;Overwrite;Overwrite Older;Skip';
  rsFileOpCopyMoveFileExistsOptions = 'Ask;Overwrite;Skip';
  rsFileOpSetPropertyErrorOptions = 'Ask;Don''t set anymore;Ignore errors';

  // Viewer
  rsViewAboutText = 'Internal Viewer of Double Commander.';
  rsViewNotFound = '%s not found!';
  rsViewEncoding = 'Encoding';
  rsViewNewSize = 'New Size';
  rsViewImageType = 'Image Type';
  rsViewBadQuality = 'Bad Quality';
  rsViewPaintToolsList = 'Pen;Rect;Ellipse';

  // Editor
  rsEditStatSelModeCol = 'COL';
  rsEditStatSelModeLine = 'LINE';
  rsEditStatSelModeNorm = 'NORM';
  rsEditStatInsertModeIns = 'INS';
  rsEditStatInsertModeOvr = 'OVR';
  rsEditGotoLineTitle = 'Goto Line';
  rsEditGotoLineQuery = 'Goto line:';
  rsEditHintModified = 'Modified';
  rsEditHintCursorPos = 'Cursor Position';
  rsEditHintInsertMode = 'Insert Mode';
  rsEditHintSelectionMode = 'Selection Mode';
  rsEditAboutText = 'Internal Editor of Double Commander.';
  // Editor Highlighters
  rsSynLangPlainText = 'Plain text';
  rsSynDefaultText   = 'Default text';
  
  // Columns in file panel
  rsColName = 'Name';
  rsColExt = 'Ext';
  rsColSize = 'Size';
  rsColDate = 'Date';
  rsColAttr = 'Attr';

  // Filter status in file panel
  rsFilterStatus = 'FILTER';
  rsSearchStatus = 'SEARCH';

  // Cancel operations in file panel
  rsCancelFilter = 'Cancel Quick Filter';
  rsCancelOperation = 'Cancel Current Operation';

  // File function names
  rsFuncName = 'Name';
  rsFuncExt = 'Extension';
  rsFuncSize = 'Size';
  rsFuncAttr = 'Attributes';
  rsFuncPath = 'Path';
  rsFuncGroup = 'Group';
  rsFuncOwner = 'Owner';
  rsFuncMTime = 'Modification date/time';
  rsFuncCTime = 'Creation date/time';
  rsFuncATime = 'Access date/time';
  rsFuncHTime = 'Change date/time';
  rsFuncLinkTo = 'Link to';
  rsFuncNameNoExt = 'Name without extension';
  rsFuncType = 'Type';
  rsFuncComment = 'Comment';
  rsFuncCompressedSize = 'Compressed size';
  rsFuncTrashOrigPath = 'Original path';

  // Tools
  rsToolViewer = 'Viewer';
  rsToolEditor = 'Editor';
  rsToolDiffer = 'Differ';
  rsToolTerminal = 'Terminal';
  rsToolErrorOpeningViewer = 'Error opening viewer';
  rsToolErrorOpeningEditor = 'Error opening editor';
  rsToolErrorOpeningDiffer = 'Error opening differ';
  rsToolErrorOpeningTerminal = 'Error opening terminal';
  // Configure custom columns dialog
  rsConfColDelete = 'Delete';
  rsConfColCaption = 'Caption';
  rsConfColWidth = 'Width';
  rsConfColAlign = 'Align';
  rsConfColFieldCont = 'Field contents';
  rsConfColMove='Move';
  rsConfCustHeader='Customize column';
  // Open with dialog
  rsOpenWithMultimedia = 'Multimedia';
  rsOpenWithDevelopment = 'Development';
  rsOpenWithEducation = 'Education';
  rsOpenWithGames = 'Games';
  rsOpenWithGraphics = 'Graphics';
  rsOpenWithNetwork = 'Network';
  rsOpenWithOffice = 'Office';
  rsOpenWithScience = 'Science';
  rsOpenWithSettings = 'Settings';
  rsOpenWithSystem = 'System';
  rsOpenWithUtility = 'Accessories';
  rsOpenWithOther = 'Other';
  // File properties dialog
  rsPropsFolder = 'Directory';
  rsPropsFile = 'File';
  rsPropsSpChrDev = 'Special character device';
  rsPropsSpBlkDev = 'Special block device';
  rsPropsNmdPipe = 'Named pipe';
  rsPropsSymLink = 'Symbolic link';
  rsPropsSocket = 'Socket';
  rsPropsUnknownType = 'Unknown type';
  rsPropsMultipleTypes = 'Multiple types';
  rsPropsContains = 'Files: %d, folders: %d';
  rsPropsErrChMod = 'Can not change access rights for "%s"';
  rsPropsErrChOwn = 'Can not change owner for "%s"';
  // Compare by content Dialog
  rsDiffShow = '&Show';
  rsDiffMatches = ' Matches: ';
  rsDiffModifies = ' Modifies: ';
  rsDiffAdds = ' Adds: ';
  rsDiffDeletes = ' Deletes: ';
  rsDiffComparing = 'Comparing...';
  rsDiffFilesIdentical = 'The two files are identical!';
  rsDiffTextIdentical = 'The text is identical, but the following options are used:';
  rsDiffTextIdenticalNotMatch =  'The text is identical, but the files do not match!'+#$0A+'The following differences were found:';
  rsDiffTextDifferenceEncoding = 'Encoding';
  rsDiffTextDifferenceLineEnding = 'Line-endings';
  // Find files dialog
  rsFindSearchFiles = 'Find files';
  rsFindDefineTemplate = 'Define template';
  rsFindScanning = 'Scanning';
  rsFindScanned = 'Scanned: %d';
  rsFindFound = 'Found: %d';
  rsFindTimeOfScan = 'Time of scan: ';
  rsFindWhereBeg = 'Begin at';
  rsFindDirNoEx = 'Directory %s does not exist!';
  rsFindDepthAll = 'all (unlimited depth)';
  rsFindDepthCurDir = 'current dir only';
  rsFindDepth = '%s level(s)';
  rsFindSaveTemplateCaption = 'Save search template';
  rsFindSaveTemplateTitle = 'Template name:';
  rsSearchTemplateUnnamed = '<unnamed template>';
  rsListOfFindfilesWindows = 'List of "Find files" windows';
  rsSelectYouFindFilesWindow = 'Select your window';
  rsNoFindFilesWindowYet = 'Sorry, no "Find files" window yet...';
  rsNoOtherFindFilesWindowToClose = 'Sorry, no other "Find files" window to close and free from memory...';
  rsNewSearchClearFilterOptions = 'Keep;Clear;Prompt';
  rsClearFiltersOrNot = 'Do you want to clear filters for this new search?';
  rsSearchWithDSXPluginInProgress = 'A file search using DSX plugin is already in progress.'+#$0A+'We need that one to be completed before to launch a new one.';
  rsSearchWithWDXPluginInProgress = 'A file search using WDX plugin is already in progress.'+#$0A+'We need that one to be completed before to launch a new one.';
  rsPluginSearchFieldNotFound = 'Field "%s" not found!';
  rsPluginSearchPluginNotFound = 'Plugin "%s" not found!';
  rsPluginSearchUnitNotFoundForField = 'Unit "%s" not found for field "%s" !';
  rsPluginSearchContainsNotCase = 'contains';
  rsPluginSearchNotContainsNotCase = '!contains';
  rsPluginSearchContainsCaseSenstive = 'contains(case)';
  rsPluginSearchNotContainsCaseSenstive = '!contains(case)';
  rsPluginSearchEqualNotCase = '=';
  rsPluginSearchNotEqualNotCase = '!=';
  rsPluginSearchEqualCaseSensitive = '=(case)';
  rsPluginSearchNotEquaCaseSensitive = '!=(case)';
  rsPluginSearchRegExpr = 'regexp';
  rsPluginSearchNotRegExpr = '!regexp';

  rsTimeUnitSecond = 'Second(s)';
  rsTimeUnitMinute = 'Minute(s)';
  rsTimeUnitHour = 'Hour(s)';
  rsTimeUnitDay = 'Day(s)';
  rsTimeUnitWeek = 'Week(s)';
  rsTimeUnitMonth = 'Month(s)';
  rsTimeUnitYear = 'Year(s)';
  rsSizeUnitBytes = 'Bytes';
  rsSizeUnitKBytes = 'Kilobytes';
  rsSizeUnitMBytes = 'Megabytes';
  rsSizeUnitGBytes = 'Gigabytes';
  rsSizeUnitTBytes = 'Terabytes';
  rsLegacyOperationByteSuffixLetter = 'B'; //Must be 1 character. Respecting legacy, letter added to following single letters for size when not empty.
  rsLegacyDisplaySizeSingleLetterKilo = 'K'; //Must be 1 character. By legacy before 2018-11 it was a 'K'. If for a language a different letter was better, it's now changeable in language file.
  rsLegacyDisplaySizeSingleLetterMega = 'M'; //Must be 1 character. By legacy before 2018-11 it was a 'M'. If for a language a different letter was better, it's now changeable in language file.
  rsLegacyDisplaySizeSingleLetterGiga = 'G'; //Must be 1 character. By legacy before 2018-11 it was a 'G'. If for a language a different letter was better, it's now changeable in language file.
  rsLegacyDisplaySizeSingleLetterTera = 'T'; //Must be 1 character. By legacy it was not present before 2018-11. It's also now changeable in language file.
  rsDefaultPersonalizedAbbrevByte = 'B';
  rsDefaultPersonalizedAbbrevKilo = 'KB';
  rsDefaultPersonalizedAbbrevMega = 'MB';
  rsDefaultPersonalizedAbbrevGiga = 'GB';
  rsDefaultPersonalizedAbbrevTera = 'TB';
  rsAbbrevDisplayDir = '<DIR>';
  rsAbbrevDisplayLink = '<LNK>';
  rsOptPersonalizedFileSizeFormat = 'Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte';
  rsOptFileSizeFloat = 'float';
  rsFreeMsg = '%s of %s free';
  rsFreeMsgShort = '%s free';

  // Other
  rsCopyNameTemplate = 'Copy (%d) %s';
  // Symlink dialog
  rsSymErrCreate = 'Error creating symlink.';
  // Hardlink dialog
  rsHardErrCreate = 'Error creating hardlink.';
  // Splitter dialog
  rsSplitSelDir = 'Select directory:';
  rsSplitErrFileSize = 'Incorrect file size format!';
  rsSplitErrDirectory = 'Unable to create target directory!';
  rsSplitErrSplitFile = 'Unable to split the file!';
  rsSplitMsgManyParts = 'The number of parts is more than 100! Continue?';
  rsSplitPreDefinedSizes = 'Automatic;1457664B - 3.5" High Density 1.44M;1213952B - 5.25" High Density 1.2M;730112B - 3.5" Double Density 720K;362496B - 5.25" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R';

  // Select duplicate files dialog
  rsSelectDuplicateMethod = 'Newest;Oldest;Largest;Smallest;First in group;Last in group';

  // Multi-Rename Tool dialog
  rsMulRenLastPreset = '[The last used]';
  rsMulRenWarningDuplicate = 'Warning, duplicate names!';
  rsMulRenAutoRename = 'Do auto-rename to "name (1).ext", "name (2).ext" etc.?';
  rsMulRenWrongLinesNumber = 'File contains wrong number of lines: %d, should be %d!';
  rsMulRenFileNameStyleList = 'No change;UPPERCASE;lowercase;First char uppercase;' +
                              'First Char Of Every Word Uppercase;';
  rsMulRenLaunchBehaviorOptions = 'Last masks under [Last One] preset;Last preset;New fresh masks';
  rsMulRenSaveModifiedPreset = '"%s" preset has been modified.'+#$0A+'Do you want to save it now?';
  rsMulRenSortingPresets = 'Sorting presets';
  rsMulRenDefineVariableName = 'Define variable name';
  rsMulRenDefineVariableValue = 'Define variable value';
  rsMulRenEnterNameForVar = 'Enter variable name';
  rsMulRenEnterValueForVar = 'Enter value for variable "%s"';
  rsMulRenExitModifiedPresetOptions = 'Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically';
  rsMulRenDefaultPresetName = 'Preset name';
  rsMulRenPromptForSavedPresetName = 'Save preset as';
  rsMulRenPromptNewPresetName = 'Enter new preset name';
  rsMulRenPromptNewNameExists = 'Preset name already exists. Overwrite?';
  rsMulRenLogStart = 'Multi-Rename Tool';

  rsMulRenMaskName = 'Name';
  rsMulRenMaskCharAtPosX = 'Character at position x';
  rsMulRenMaskCharAtPosXtoY = 'Characters from position x to y';
  rsMulRenMaskFullName = 'Complete filename with path and extension';
  rsMulRenMaskFullNameCharAtPosXtoY = 'Complete filename, char from pos x to y';
  rsMulRenMaskParent = 'Parent folder(s)';
  rsMulRenMaskExtension = 'Extension';
  rsMulRenMaskCounter = 'Counter';
  rsMulRenMaskGUID = 'GUID';
  rsMulRenMaskVarOnTheFly = 'Variable on the fly';
  rsMulRenMaskYear2Digits = 'Year (2 digits)';
  rsMulRenMaskYear4Digits = 'Year (4 digits)';
  rsMulRenMaskMonth = 'Month';
  rsMulRenMaskMonth2Digits = 'Month (2 digits)';
  rsMulRenMaskMonthAbrev = 'Month name (short, e.g., "jan")';
  rsMulRenMaskMonthComplete = 'Month name (long, e.g., "january")';
  rsMulRenMaskDay = 'Day';
  rsMulRenMaskDay2Digits = 'Day (2 digits)';
  rsMulRenMaskDOWAbrev = 'Day of the week (short, e.g., "mon")';
  rsMulRenMaskDOWComplete = 'Day of the week (long, e.g., "monday")';
  rsMulRenMaskCompleteDate = 'Complete date';
  rsMulRenMaskHour = 'Hour';
  rsMulRenMaskHour2Digits = 'Hour (2 digits)';
  rsMulRenMaskMin = 'Minute';
  rsMulRenMaskMin2Digits = 'Minute (2 digits)';
  rsMulRenMaskSec = 'Second';
  rsMulRenMaskSec2Digits = 'Second (2 digits)';
  rsMulRenMaskCompleteTime = 'Complete time';

  rsMulRenFilename = 'Name';
  rsMulRenExtension = 'Extension';
  rsMulRenCounter = 'Counter';
  rsMulRenDate = 'Date';
  rsMulRenTime = 'Time';
  rsMulRenPlugins = 'Plugins';

  // CheckSumCalcVerify dialog
  rsCheckSumVerifyTitle = 'Verify checksum';
  rsCheckSumVerifyText = 'Enter checksum and select algorithm:';
  // CheckSumVerify dialog
  rsCheckSumVerifyGeneral = 'General:';
  rsCheckSumVerifyTotal = 'Total:';
  rsCheckSumVerifySuccess = 'Success:';
  rsCheckSumVerifyMissing = 'Missing:';
  rsCheckSumVerifyBroken = 'Broken:';
  rsCheckSumVerifyReadError = 'Read error:';
  // Drive status
  rsDriveNoMedia = '<no media>';
  rsDriveNoLabel = '<no label>';

  // Edit
  rsEditNewFile = 'new.txt';
  rsEditNewOpen = 'Open file';
  rsEditNewFileName = 'Filename:';

  // Edit search
  rsEditSearchCaption = 'Search';
  rsEditSearchReplace ='Replace';
  rsEditSearchFrw = '&Forward';
  rsEditSearchBack = '&Backward';
  rsZeroReplacement = 'No replacement took place.';
  rsXReplacements = 'Number of replacement: %d';

  // Options editors
  rsOptionsEditorArchivers = 'Archivers';
  rsOptionsEditorAutoRefresh = 'Auto refresh';
  rsOptionsEditorBehavior = 'Behaviors';
  rsOptionsEditorColors = 'Colors';
  rsOptionsEditorBriefView = 'Brief';
  rsOptionsEditorColumnsView = 'Columns';
  rsOptionsEditorCustomColumns = 'Custom columns';
  rsOptionsEditorConfiguration = 'Configuration';
  rsOptionsEditorDragAndDrop = 'Drag & drop';
  rsOptionsEditorDrivesListButton = 'Drives list button';
  rsOptionsEditorFileOperations = 'File operations';
  rsOptionsEditorFilePanels = 'File panels';
  rsOptionsEditorFileTypes = 'File types';
  rsOptionsEditorFileNewFileTypes = 'New';
  rsOptionsEditorFilesViews = 'Files views';
  rsOptionsEditorFilesViewsComplement = 'Files views extra';
  rsOptionsEditorFolderTabs = 'Folder tabs';
  rsOptionsEditorFolderTabsExtra = 'Folder tabs extra';
  rsOptionsEditorFonts = 'Fonts';
  rsOptionsEditorHighlighters = 'Highlighters';
  rsOptionsEditorHotKeys = 'Hot keys';
  rsOptionsEditorIcons = 'Icons';
  rsOptionsEditorIgnoreList = 'Ignore list';
  rsOptionsEditorKeyboard = 'Keys';
  rsOptionsEditorLanguage = 'Language';
  rsOptionsEditorLayout = 'Layout';
  rsOptionsEditorLog = 'Log';
  rsOptionsEditorMiscellaneous = 'Miscellaneous';
  rsOptionsEditorMouse = 'Mouse';
  rsOptionsEditorPlugins = 'Plugins';
  rsOptionsEditorPluginsDsx = 'Search plugins';
  rsOptionsEditorPluginsWcx = 'Packer plugins';
  rsOptionsEditorPluginsWlx = 'Viewer plugins';
  rsOptionsEditorPluginsWdx = 'Content plugins';
  rsOptionsEditorPluginsWfx = 'File system plugins';
  rsOptionsEditorQuickSearch = 'Quick search/filter';
  rsOptionsEditorTerminal = 'Terminal';
  rsOptionsEditorToolbar = 'Toolbar';
  rsOptionsEditorToolbarExtra = 'Toolbar Extra';
  rsOptionsEditorToolbarMiddle = 'Toolbar Middle';
  rsOptionsEditorTools = 'Tools';
  rsOptionsEditorTooltips = 'Tooltips';
  rsOptionsEditorFileAssoc = 'File associations';
  rsOptionsEditorFileAssicExtra = 'File associations extra';
  rsOptionsEditorDirectoryHotlist = 'Directory Hotlist';
  rsOptionsEditorDirectoryHotlistExtra = 'Directory Hotlist Extra';
  rsOptionsEditorFavoriteTabs = 'Favorite Tabs';
  rsOptionsEditorOptionsChanged = 'Options have changed in "%s"'+#$0A+#$0A+'Do you want to save modifications?';
  rsOptionsEditorFileSearch = 'File search';
  rsOptionsEditorMultiRename = 'Multi-Rename Tool';
  //-------------------------------
  rsOptConfigSortOrder = 'Classic, legacy order;Alphabetic order (but language still first)';
  rsOptConfigTreeState = 'Full expand;Full collapse';
  rsOptDifferFramePosition = 'Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right';
  //-------------------------------
  rsDarkMode = 'Dark mode';
  rsDarkModeOptions = 'Auto;Enabled;Disabled';
  //-------------------------------
  rsDriveFreeSpaceIndicator = 'Drive Free Space Indicator';
  //-------------------------------
  rsOptEnterExt = 'Enter extension';
  rsOptAssocPluginWith = 'Associate plugin "%s" with:';
  rsOptMouseSelectionButton = 'Left button;Right button;';
  rsOptAutoSizeColumn = 'First;Last;';
  rsOptTabsPosition = 'Top;Bottom;';
  rsOptArchiveTypeName = 'Archive type name:';
  //-------------------------------
  // Hotkeys
  rsOptHotkeysAddDeleteShortcutLong =
    'Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting.';
  rsOptHotkeysAddShortcutButton = 'Add shortcut';
  rsOptHotkeysCannotSetShortcut = 'Cannot set shortcut';
  rsOptHotkeysChangeShortcut = 'Change shortcut';
  rsOptHotkeysDeleteTrashCanOverrides =
    'Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?';
  rsOptHotkeysDeleteTrashCanParameterExists =
    'Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?';
  rsOptHotkeysSetDeleteShortcut = 'Set shortcut to delete file';
  rsOptHotkeysShortcutForDeleteAlreadyAssigned =
    'For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?';
  rsOptHotkeysShortcutForDeleteIsSequence =
    'Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work.';
  rsOptHotkeysCommand = 'Command';
  rsOptHotkeysDescription = 'Description';
  rsOptHotkeysFixParameter = 'Fix parameter';
  rsOptHotkeysHotkeys = 'Hotkeys';
  rsOptHotkeysHotkey = 'Hotkey';
  rsOptHotkeysNoHotkey = '<none>';
  rsOptHotkeysParameters = 'Parameters';
  rsOptHotkeysShortCutUsed = 'Shortcut in use';
  rsOptHotkeysShortCutUsedText1 = 'Shortcut %s is already used.';
  rsOptHotkeysShortCutUsedText2 = 'Change it to %s?';
  rsOptHotkeysUsedBy = 'used for %s in %s';
  rsOptHotkeysUsedWithDifferentParams = 'used for this command but with different parameters';
  rsOptHotkeysAddHotkey = 'Add hotkey for %s';
  rsOptHotkeysEditHotkey = 'Edit hotkey for %s';
  rsHotkeyCategoryMain = 'Main';
  rsHotkeyCategoryViewer = 'Viewer';
  rsHotkeyCategoryEditor = 'Editor';
  rsHotkeyCategoryFindFiles = 'Find files';
  rsHotkeyCategoryDiffer = 'Differ';
  rsHotkeyCategoryCopyMoveDialog = 'Copy/Move Dialog';
  rsHotkeyCategorySyncDirs = 'Synchronize Directories';
  rsHotkeyCategoryEditCommentDialog = 'Edit Comment Dialog';
  rsHotkeyCategoryMultiRename = 'Multi-Rename Tool';
  rsHotkeySortOrder = 'By command name;By shortcut key (grouped);By shortcut key (one per row)';
  rsHotKeyNoSCEnter='No shortcut with "ENTER"';
  rsHotKeyFileSaveModified = '"%s" setup has been modified.'+#$0A+'Do you want to save it now?';
  rsHotKeyFileNewName = 'New name';
  rsHotKeyFileInputNewName = 'Input your new name';
  rsHotKeyFileAlreadyExists = 'A setup with that name already exists.'+#$0A+'Do you want to overwrite it?';
  rsHotKeyFileCopyOf = 'Copy of %s';
  rsHotKeyFileConfirmErasure = 'Are you sure you want to erase setup "%s"?';
  rsHotKeyFileMustKeepOne = 'You must keep at least one shortcut file.';
  rsHotKeyFileConfirmDefault = 'Are you sure you want to restore default?';

  rsCmdCategoryListInOrder='All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log';
  rsCmdKindOfSort='Legacy sorted;A-Z sorted';
  rsMsgThisIsNowInClipboard = '"%s" is now in the clipboard';
  rsSimpleWordAll = 'All';
  rsSimpleWordCommand = 'Command';
  rsSimpleWordCategory = 'Category';
  rsSimpleWordFilename = 'Filename';
  rsSimpleWordParameter = 'Param';
  rsSimpleWordWorkDir = 'WorkDir';
  rsSimpleWordResult = 'Result';
  rsSimpleWordColumnSingular = 'Column';
  rsSimpleWordLetter = 'Letter';
  rsSimpleWordTrue = 'True';
  rsSimpleWordFalse = 'False';
  rsSimpleWordError = 'Error';
  rsSimpleWordSuccessExcla = 'Success!';
  rsSimpleWordFailedExcla = 'Failed!';
  rsSimpleWordVariable = 'Variable';

  // Plugins
  rsOptPluginsActive = 'Active';
  rsOptPluginsName = 'Name';
  rsOptPluginsRegisteredFor = 'Registered for';
  rsOptPluginsFileName = 'File name';
  rsOptPluginsDescription = 'Description';
  rsOptPluginAlreadyAssigned = 'Plugin %s is already assigned for the following extensions:';
  rsOptPluginEnable = 'E&nable';
  rsOptPluginDisable = 'D&isable';
  rsOptPluginShowByPlugin = 'By Plugin';
  rsOptPluginShowByExtension = 'By extension';
  rsOptPluginsSelectLuaLibrary = 'Select Lua library file';
  rsOptPluginSortOnlyWhenByExtension = 'Sorting WCX plugins is only possible when showing plugins by extension!';
  rsPluginFilenameStyleList = 'With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following';  
  //-------------------------------
  rsOptSortMethod = 'Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort';
  rsOptSortCaseSens = 'not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)';
  rsOptSortFolderMode = 'sort by name and show first;sort like files and show first;sort like files';
  rsOptNewFilesPosition = 'at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list';
  rsOptUpdatedFilesPosition = 'don''t change position;use the same setting as for new files;to sorted position';
  rsOptFileOperationsProgressKind = 'separate window;minimized separate window;operations panel';
  rsOptTypeOfDuplicatedRename = 'DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext';
  // Keyboard
  rsOptLetters = 'None;Command Line;Quick Search;Quick Filter';
  // Directory hotlist
  rsOptAddFromMainPanel = 'Add at &beginning;Add at the end;Smart add';
  //File Associations
  rsMsgTitleExtNotInFileType = 'Extension of selected file is not in any recognized file types';
  rsMsgSekectFileType = 'Select to which file type to add extension "%s"';
  rsMsgCreateANewFileType = '< Create a new file type "%s files" >';
  rsMsgEnterNewFileTypeName = 'Enter name of new file type to create for extension "%s"';
  rsMsgEnterCustomAction = 'Enter custom action name:';
  rsSimpleWordFiles = 'files';
  rsViewWithInternalViewer = 'with internal viewer';
  rsEditWithInternalEditor = 'with internal editor';
  rsViewWithExternalViewer = 'with external viewer';
  rsEditWithExternalEditor = 'with external editor';
  rsExecuteViaShell = 'Execute via shell';
  rsExecuteViaTerminalClose = 'Execute via terminal and close';
  rsExecuteViaTerminalStayOpen = 'Execute via terminal and stay open';
  rsConfigurationFileAssociation = 'Configure file association';
  //Variables
  rsConfirmExecution = 'Confirming command line and parameters';
  rsVarHelpWith = 'Help with "%" variables';
  rsVarOtherExamples = 'Other example of what''s possible';

  rsVarOnlyFilename = 'Only filename';
  rsVarPath = 'Path, without ending delimiter';
  rsVarLastDirOfPath = 'Last directory of file''s path';
  rsVarFullPath = 'Complete filename (path+filename)';
  rsVarFilenameNoExt = 'Just filename, no extension';
  rsVarOnlyExtension = 'Only file extension';
  rsVarRelativePathAndFilename = 'Filename with relative path';
  rsVarCurrentPath = 'Path of panel';
  rsVarLastDirCurrentPath = 'Last directory of panel''s path';
  rsVarListFilename = 'Temporary filename of list of filenames';
  rsVarListFullFilename = 'Temporary filename of list of complete filenames (path+filename)';
  rsVarListRelativeFilename = 'Temporary filename of list of filenames with relative path';
  rsVarListInUTF8 = 'Filenames in list in UTF-8';
  rsVarListInUTF16 = 'Filenames in list in UTF-16 with BOM';
  rsVarListInUTF8Quoted = 'Filenames in list in UTF-8, inside double quotes';
  rsVarListInUTF16Quoted = 'Filenames in list in UTF-16 with BOM, inside double quotes';

  rsVarSourcePanel = 'Active panel (source)';
  rsVarTargetPanel = 'Inactive panel (target)';
  rsVarLeftPanel = 'Left panel';
  rsVarRightPanel = 'Right panel';
  rsVarBothPanelLeftToRight = 'Both panels, from left to right';
  rsVarBothPanelActiveToInactive = 'Both panels, from active to inactive';

  rsVarShowCommandPrior = 'Show command prior execute';
  rsVarPercentSign = 'Return the percent sign';
  rsVarPercentChangeToPound =  'From here to the end of the line, the percent-variable indicator is the "#" sign';
  rsVarPoundChangeToPercent =  'From here to the end of the line, the percent-variable indicator is back the "%" sign';
  rsVarWillNotBeQuoted =  'Filenames will not be quoted from here';
  rsVarWillBeQuoted =  'Filenames will be quoted from here (default)';
  rsVarWillNotHaveEndingDelimiter =  'Paths will not have ending delimiter (default)';
  rsVarWillHaveEndingDelimiter =  'Paths will have ending delimiter';
  rsVarWillNotDoInTerminal =  'Command will be done in terminal, closed at the end';
  rsVarWillDoInTerminal =  'Command will be done in terminal, remaining opened at the end';
  rsVarSimpleMessage = '%[Simple message]';
  rsVarSimpleShowMessage =  'Will show a simple message';
  rsVarPromptUserForParam = '%[Prompt user for param;Default value proposed]';
  rsVarInputParam =  'Will request request user to enter a parameter with a default suggested value';
  rsVarPrependElement = 'Prepend each name with "-a " or what you want';
  rsVarEncloseElement = 'Enclose each name in brackets or what you want';
  rsVarSecondElementRightPanel = 'Full path of second selected file in right panel';

  // Quick Search/Filter
  rsOptSearchItems = '&Files;Di&rectories;Files a&nd Directories';
  rsOptSearchCase = '&Sensitive;&Insensitive';
  rsOptSearchOpt = 'Ignore &diacritics and ligatures;&Hide filter panel when not focused;Keep saving setting modifications for next session';

  // Toolbar
  rsOptToolbarButtonType = 'S&eparator;Inte&rnal command;E&xternal command;Men&u';
  rsImportToolbarProblem = 'Cannot find reference to default bar file';
  rsMsgToolbarSaved = 'Saved!'+#$0A+'Toolbar filename: %s';
  rsMsgTCToolbarWhereToSave = 'Enter location and filename where to save a TC Toolbar file';
  rsMsgDCToolbarWhereToSave = 'Enter location and filename where to save a DC Toolbar file';
  rsMsgToolbarRestoreWhat = 'Enter location and filename of Toolbar to restore';
  rsMsgToolbarLocateTCToolbarFile = 'Locate ".BAR" file to import';
  rsMsgToolbarLocateDCToolbarFile = 'Locate ".toolbar" file to import';
  rsMsgTCToolbarNotFound = 'Error! Cannot find the desired wanted TC toolbar output folder:'+#$0A+'%s';
  rsMsgTCConfigNotFound = 'Error! Cannot find the TC configuration file:'+#$0A+'%s';
  rsMsgTCExecutableNotFound = 'Error! Cannot find the TC configuration executable:'+#$0A+'%s';
  rsMsgTCisRunning = 'Error! TC is still running but it should be closed for this operation.'+#$0A+'Close it and press OK or press CANCEL to abort.';
  rsMsgAllDCIntCmds = 'All Double Commander internal commands';

  // macOS Modern Form Sytle
  rsMFSTBITreeViewTitle = 'TreeView';
  rsMFSTBITreeViewTips = 'Show Tree View Panel';
  rsMFSTBIHorzSplitTitle = 'HorzSplit';
  rsMFSTBIHorzSplitTips = 'Toggle Horizontal Split Mode';
  rsMFSTBISwapPanelsTitle = 'SwapPanels';
  rsMFSTBISwapPanelsTips = 'Swap Panels';
  rsMFSTBIGoBackwardTitle = 'Backward';
  rsMFSTBIGoBackwardTips = 'Backward';
  rsMFSTBIGoForwardTitle = 'Forward';
  rsMFSTBIGoForwardTips = 'Forward';

  rsMFSTBIiCloudDriveTitle = 'iCloud Drive';
  rsMFSTBIiCloudDriveTips = 'iCloud Drive';

  rsMFSTBINetworkTitle = 'network';
  rsMFSTBINetworkTips = 'network';

  rsMFSTBIShowModeTitle = 'ShowMode';
  rsMFSTBIShowModeTips = 'Show as Brief, Full or Thumbnails';
  rsMFSTBIShowBriefTitle = 'as Brief';
  rsMFSTBIShowFullTitle = 'as Full';
  rsMFSTBIShowThumbnailsTitle = 'as Thumbnails';
  rsMFSTBIShareTitle = 'Share';
  rsMFSTBIAirDropTitle = 'AirDrop';
  rsMFSTBIAirDropTips = 'AirDrop';
  rsMFSTBIQuickLookTitle = 'QuickLook';
  rsMFSTBIQuickLookTips = 'macOS Quick Look Panel';
  rsMFSTBIEditFinderTagTitle = 'EditTag';
  rsMFSTBIEditFinderTagTips = 'Edit Finder Tags...';

  rsMFSTBIGoTitle = 'Go';
  rsMFSTBIGoTips = 'Go';
  rsMFSTBIFinderRevealTitle = 'Finder';
  rsMFSTBIFinderRevealTips = 'Reveal in Finder';
  rsMFSTBIShowInfoTitle = 'ShowInfo';
  rsMFSTBIShowInfoTips = 'Show Info in Finder';

  rsMFSTBICommandTitle = 'Command';
  rsMFSTBICommandMenuDirectoryHotlist = 'Directory Hotlist';
  rsMFSTBICommandMenuFavoriteTabs = 'Favorite Tabs';
  rsMFSTBICommandMenuQuickLook = 'macOS QuickLook';

  rsMFSTBISearchTitle = 'Search';
  rsMFSTBISearchTips  = 'Search Files...';
  rsMFSTBISearchCombinedTags = 'Search for combined tags...';

  rsMFSTBITerminalTitle = 'Terminal';
  rsMFSTBITerminalTips  = 'Open in Terminal';
  rsMFSTBIPrivilegeTitle = 'Privilege';
  rsMFSTBIPrivilegeTips = 'As a file manager, Double Command requires full disk access permissions. Clicking this button will pop up the macOS system settings page. Please add "Double Commander.app" to the "Full Disk Access" list to complete the authorization.';

  rsMFSTBIRefreshTitle = 'Refresh';
  rsMFSTBIRefreshTips = 'Refresh File List';
  rsMFSTBICompareTitle = 'Compare';
  rsMFSTBICompareTips = 'Compare by Contents...';

  rsMFSTBISyncTitle = 'Sync';
  rsMFSTBISyncTips = 'Synchronize Dirs...';

  rsMFSTBIEditTitle = 'Edit';
  rsMFSTBIEditTips = 'Edit...';

  rsMountedFileSourceCopyMultiFilesToWcxDlgTitle = 'The operation is not supported';
  rsMountedFileSourceCopyMultiFilesToWcxDlgMessage = 'Some virtual filesystem contain specific directory structures. When copying from it to a compressed archive, only one directory can be selected at a time, unless the actual locations of the selected directories are all located under the same parent directory.'#13#13'For example, for iCloud Drive, when copying directory from the root to a compressed archive, maybe only one directory should be selected.'#13#13'It is recommended that you follow your usual practice and try to select only one directory when you receive this prompt.';

  // macOS
  rsiCloudDriveCopySeedFileConfirmDlgTitle = 'The operation may contain files that were not downloaded, continue anyway?';
  rsiCloudDriveCopySeedFileConfirmDlgMessage = 'It is recommended to download the files first. Otherwise, what is copied is not the content of the files, but the corresponding placeholder files, which will result in hidden files with the .iCloud extension.';
  rsMacOSAssignFinderTagsToMultiItems = 'Assign tags to %d items';
  rsMacOSConnectServerTitle = 'SMB / Samba / WebDAV / NFS ...';
  rsMacOSConnectServerPrompt = 'URL:'#10'(eg. smb://server/share; https://dav.server.com; nfs://server/path)'#10' ';

  //Columns Menu
  rsMenuConfigureCustomColumns= 'Configure custom columns';
  rsMenuConfigureEnterCustomColumnName = 'Enter new custom columns name';
  rsMenuConfigureColumnsSaveToChange = 'To change current editing colmuns view, either SAVE, COPY or DELETE current editing one';
  rsMenuConfigureColumnsAlreadyExists = 'A columns view with that name already exists.';

  // Operation states.
  rsOperNotStarted = 'Not started';
  rsOperStarting = 'Starting';
  rsOperRunning = 'Running';
  rsOperPausing = 'Pausing';
  rsOperPaused = 'Paused';
  rsOperWaitingForFeedback = 'Waiting for user response';
  rsOperWaitingForConnection = 'Waiting for access to file source';
  rsOperStopping = 'Stopping';
  rsOperStopped = 'Stopped';
  rsOperFinished = 'Finished';
  rsOperAborted = 'Aborted';

  // Operations descriptions.
  rsOperCalculatingCheckSum = 'Calculating checksum';
  rsOperCalculatingCheckSumIn = 'Calculating checksum in "%s"';
  rsOperCalculatingCheckSumOf = 'Calculating checksum of "%s"';
  rsOperCalculatingStatictics = 'Calculating';
  rsOperCalculatingStatisticsIn = 'Calculating "%s"';
  rsOperCombining = 'Joining';
  rsOperCombiningFromTo = 'Joining files in "%s" to "%s"';
  rsOperCopying = 'Copying';
  rsOperCopyingFromTo = 'Copying from "%s" to "%s"';
  rsOperCopyingSomethingTo = 'Copying "%s" to "%s"';
  rsOperCreatingDirectory = 'Creating directory';
  rsOperCreatingSomeDirectory = 'Creating directory "%s"';
  rsOperDeleting = 'Deleting';
  rsOperDeletingIn = 'Deleting in "%s"';
  rsOperDeletingSomething = 'Deleting "%s"';
  rsOperExecuting = 'Executing';
  rsOperExecutingSomething = 'Executing "%s"';
  rsOperExtracting = 'Extracting';
  rsOperExtractingFromTo = 'Extracting from "%s" to "%s"';
  rsOperListing = 'Listing';
  rsOperListingIn = 'Listing "%s"';
  rsOperMoving = 'Moving';
  rsOperMovingFromTo = 'Moving from "%s" to "%s"';
  rsOperMovingSomethingTo = 'Moving "%s" to "%s"';
  rsOperPacking = 'Packing';
  rsOperPackingFromTo = 'Packing from "%s" to "%s"';
  rsOperPackingSomethingTo = 'Packing "%s" to "%s"';
  rsOperSettingProperty = 'Setting property';
  rsOperSettingPropertyIn = 'Setting property in "%s"';
  rsOperSettingPropertyOf = 'Setting property of "%s"';
  rsOperSplitting = 'Splitting';
  rsOperSplittingFromTo = 'Splitting "%s" to "%s"';
  rsOperTesting = 'Testing';
  rsOperTestingSomething = 'Testing "%s"';
  rsOperTestingIn = 'Testing in "%s"';
  rsOperVerifyingCheckSum = 'Verifying checksum';
  rsOperVerifyingCheckSumIn = 'Verifying checksum in "%s"';
  rsOperVerifyingCheckSumOf = 'Verifying checksum of "%s"';
  rsOperWiping = 'Wiping';
  rsOperWipingIn = 'Wiping in "%s"';
  rsOperWipingSomething = 'Wiping "%s"';
  rsOperWorking = 'Working'; // Generic description for unknown operation

  //TreeViewMenu
  rsOptionsEditorTreeViewMenu = 'Tree View Menu';
  rsOptionsEditorTreeViewMenuColors = 'Tree View Menu Colors';
  rsStrPreviewSearchingLetters = 'OU';
  rsStrPreviewJustPreview = 'Just preview';
  rsStrPreviewWordWithSearched1 = 'Fabulous';
  rsStrPreviewWordWithSearched2 = 'Marvelous';
  rsStrPreviewWordWithSearched3 = 'Tremendous';
  rsStrPreviewSideNote = 'Side note';
  rsStrPreviewOthers = 'Others';
  rsStrPreviewWordWithoutSearched1 = 'Flat';
  rsStrPreviewWordWithoutSearched2 = 'Limited';
  rsStrPreviewWordWithoutSearched3 = 'Simple';
  rsMsgUnexpectedUsageTreeViewMenu = 'ERROR: Unexpected Tree View Menu usage!';
  rsStrTVMChooseHotDirectory = 'Choose your directory from Hot Directory:';
  rsStrTVMChooseFavoriteTabs = 'Choose you Favorite Tabs:';
  rsStrTVMChooseDirHistory = 'Choose your directory from Dir History';
  rsStrTVMChooseViewHistory = 'Choose your directory from File View History';
  rsStrTVMChooseFromToolbar = 'Choose your action from Maintool bar';
  rsStrTVMChooseFromMainMenu = 'Choose your action from Main Menu';
  rsStrTVMChooseFromCmdLineHistory = 'Choose your command from Command Line History';
  rsStrTVMChooseYourFileOrDir = 'Choose your file or your directory';

  //Split/Combine operation special message
  rsMsgBadCRC32 = 'Bad CRC32 for resulting file:'+#$0A+'"%s"'+#$0A+#$0A+'Do you want to keep the resulting corrupted file anyway?';
  rsMsgProvideThisFile = 'Please, make this file available. Retry?';
  rsMsgIncorrectFilelength = 'Incorrect resulting filelength for file : "%s"';
  rsMSgUndeterminedNumberOfFile = 'Undetermined';
  rsMsgInsertNextDisk = 'Please insert next disk or something similar.'+#$0A+#$0A+'It is to allow writing this file:'+#$0A+'"%s"'+#$0A+''+#$0A+'Number of bytes still to write: %d';
  msgTryToLocateCRCFile = 'This file cannot be found and could help to validate final combination of files:'+#$0A+'%s'+#$0A+#$0A+'Could you make it available and press "OK" when ready,'+#$0A+'or press "CANCEL" to continue without it?';

  rsMsgInvalidHexNumber = 'Invalid hexadecimal number: "%s"';

  //LUA and script related messages
  rsMsgScriptCantFindLibrary = 'ERROR: Problem loading Lua library file "%s"';
  rsMsgWantToConfigureLibraryLocation = 'Do you want to configure Lua library location?';

  // Unhandled error.
  rsUnhandledExceptionMessage =
     'Please report this error to the bug tracker with a description '
   + 'of what you were doing and the following file:%s'
   + 'Press %s to continue or %s to abort the program.';

function GetLanguageName(const poFileName : String) : String;
procedure lngLoadLng(const sFileName:String);
procedure DoLoadLng;

implementation

uses
  Forms, Classes, SysUtils, StrUtils, GetText, Translations, uGlobs, uGlobsPaths,
  uTranslator, uDebug, DCClassesUtf8, DCOSUtils, DCStrUtils, StreamEx;

function GetLanguageName(const poFileName: String): String;
var
  sLine: String;
  S, F, Index : Integer;
  Stream: TFileStreamEx;
  Reader: TStreamReader;
begin
  try
    Stream:= TFileStreamEx.Create(poFileName, fmOpenRead or fmShareDenyNone);
    try
      Index:= 0;
      Reader:= TStreamReader.Create(Stream, BUFFER_SIZE, True);
      repeat
        sLine:= Reader.ReadLine;
        S:= Pos('X-Native-Language', sLine);
        if S > 0 then
        begin
          S:= Pos(':', sLine, S + 17) + 2;
          F:= Pos('\n', sLine, S) - 1;
          Result:= Copy(sLine, S,  (F - S) + 1);
          Exit;
        end;
        Inc(Index);
      until (Reader.Eof or (Index > 256));
    finally
      Reader.Free;
    end;
  except
    // Ignore
  end;
  Result:= 'Unknown';
end;

procedure TranslateLCL(poFileName: String);
const
  BidiModeMap: array[Boolean] of TBiDiMode = (bdLeftToRight,
    {$IF DEFINED(LCLWIN32)}
    bdRightToLeftNoAlign // see http://bugs.freepascal.org/view.php?id=28483
    {$ELSE}
    bdRightToLeft
    {$ENDIF}
  );
var
  Lang: String =  '';
  FallbackLang: string = '';
  UserLang, LCLLngDir: String;
begin
  LCLLngDir:= gpLngDir + 'lcl' + PathDelim;
  if NumCountChars('.', poFileName) >= 2 then
  begin
    UserLang:= ExtractDelimited(2, poFileName, ['.']);
    Application.BidiMode:= BidiModeMap[Application.IsRTLLang(UserLang)];
    poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [UserLang]);
    if not mbFileExists(poFileName) then
    begin
      GetLanguageIDs(Lang, FallbackLang);
      poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [Lang]);
      if not mbFileExists(poFileName) then
        poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [FallbackLang]);
    end;
    if mbFileExists(poFileName) then
      Translations.TranslateUnitResourceStrings('LCLStrConsts', poFileName);
  end;
end;

procedure lngLoadLng(const sFileName: String);
const
  DEFAULT_PO = 'doublecmd.pot';
var
  Lang: String = '';
  FallbackLang: String = '';
begin
  // Default english interface
  if StrBegins(sFileName, 'doublecmd.po') then
  begin
    gPOFileName := DEFAULT_PO;
    Exit;
  end;
  gPOFileName := sFileName;
  if not mbFileExists(gpLngDir + gPOFileName) then
  begin
    gPOFileName := 'doublecmd.%s.po';
    GetLanguageIDs(Lang, FallbackLang);
    gPOFileName := Format(gPOFileName,[FallbackLang]);
  end;
  if not mbFileExists(gpLngDir + gPOFileName) then
  begin
    gPOFileName := Format(gPOFileName,[Lang]);
  end;
  if not mbFileExists(gpLngDir + gPOFileName) then
    gPOFileName := DEFAULT_PO
  else begin
    DCDebug('Loading lng file: ' + gpLngDir + gPOFileName);
    LRSTranslator := TTranslator.Create(gpLngDir + gPOFileName);
    Translations.TranslateResourceStrings(TTranslator(LRSTranslator).POFile);
    TranslateLCL(gPOFileName);
  end;
end;

procedure DoLoadLng;
begin
  lngLoadLng(gPOFileName);
end;

finalization
  FreeAndNil(LRSTranslator);

end.
