Explorar o código

Merge branch 'main' into issig-v2-filename

Martijn Laan hai 2 meses
pai
achega
ee0e5f136d

+ 1 - 1
Components/UniPs

@@ -1 +1 @@
-Subproject commit 345a694d876ac84b38d1c10a8cc8adc6ffcd1525
+Subproject commit 8ccfdbf63707a0756ee86f714e6cb9f4643bbdb7

+ 25 - 8
Files/Languages/Bulgarian.isl

@@ -1,4 +1,4 @@
-; *** Inno Setup version 6.4.0+ Bulgarian messages ***
+; *** Inno Setup version 6.5.0+ Bulgarian messages ***
 ; Ventsislav Dimitrov <[email protected]>
 ; Ventsislav Dimitrov <[email protected]>
 ;
 ;
 ; За да изтеглите преводи на този файл, предоставени от потребители, посетете:
 ; За да изтеглите преводи на този файл, предоставени от потребители, посетете:
@@ -211,24 +211,27 @@ ReadyMemoGroup=Папка в менюто "Старт":
 ReadyMemoTasks=Допълнителни задачи:
 ReadyMemoTasks=Допълнителни задачи:
 
 
 ; *** Страница "TDownloadWizardPage" на съветника и DownloadTemporaryFile
 ; *** Страница "TDownloadWizardPage" на съветника и DownloadTemporaryFile
-DownloadingLabel=Изтегляне на допълнителни файлове...
+DownloadingLabel2=Изтегляне на файлове...
 ButtonStopDownload=&Спри изтеглянето
 ButtonStopDownload=&Спри изтеглянето
 StopDownload=Сигурни ли сте, че искате да спрете изтеглянето?
 StopDownload=Сигурни ли сте, че искате да спрете изтеглянето?
 ErrorDownloadAborted=Изтеглянето беше прекъснато
 ErrorDownloadAborted=Изтеглянето беше прекъснато
 ErrorDownloadFailed=Изтеглянето беше неуспешно: %1 %2
 ErrorDownloadFailed=Изтеглянето беше неуспешно: %1 %2
 ErrorDownloadSizeFailed=Неуспешно получаване на размер: %1 %2
 ErrorDownloadSizeFailed=Неуспешно получаване на размер: %1 %2
-ErrorFileHash1=Неуспешна контролна сума на файл: %1
-ErrorFileHash2=Невалидна контролна сума на файл: очаквана %1, открита %2
 ErrorProgress=Невалиден напредък: %1 of %2
 ErrorProgress=Невалиден напредък: %1 of %2
 ErrorFileSize=Невалиден размер на файл: очакван %1, открит %2
 ErrorFileSize=Невалиден размер на файл: очакван %1, открит %2
 
 
-; *** Страница "TExtractionWizardPage" на съветника и Extract7ZipArchive
-ExtractionLabel=Извличане на допълнителни файлове...
+; *** Страница "TExtractionWizardPage" на съветника и ExtractArchive
+ExtractingLabel=Извличане на файлове...
 ButtonStopExtraction=&Спри извличането
 ButtonStopExtraction=&Спри извличането
 StopExtraction=Сигурни ли сте, че искате да спрете извличането?
 StopExtraction=Сигурни ли сте, че искате да спрете извличането?
 ErrorExtractionAborted=Прекратено извличане
 ErrorExtractionAborted=Прекратено извличане
 ErrorExtractionFailed=Извличането беше неуспешно: %1
 ErrorExtractionFailed=Извличането беше неуспешно: %1
 
 
+; *** Повече информация за неуспешно извличане от архив
+ArchiveIncorrectPassword=Паролата е неправилна
+ArchiveIsCorrupted=Архивът е повреден
+ArchiveUnsupportedFormat=Форматът на архива не се поддържа
+
 ; *** Страница "Подготовка за инсталиране" на съветника
 ; *** Страница "Подготовка за инсталиране" на съветника
 WizardPreparing=Подготовка за инсталиране
 WizardPreparing=Подготовка за инсталиране
 PreparingDesc=Инсталаторът се подготвя да инсталира [name] във Вашия компютър.
 PreparingDesc=Инсталаторът се подготвя да инсталира [name] във Вашия компютър.
@@ -273,11 +276,15 @@ AbortRetryIgnoreSelectAction=Изберете действие
 AbortRetryIgnoreRetry=Повторен &опит
 AbortRetryIgnoreRetry=Повторен &опит
 AbortRetryIgnoreIgnore=&Пренебрегни грешката и продължи
 AbortRetryIgnoreIgnore=&Пренебрегни грешката и продължи
 AbortRetryIgnoreCancel=Прекрати инсталацията
 AbortRetryIgnoreCancel=Прекрати инсталацията
+RetryCancelSelectAction=Изберете действие
+RetryCancelRetry=&Повторен опит
+RetryCancelCancel=Отказ
 
 
 ; *** Съобщения за хода на инсталирането
 ; *** Съобщения за хода на инсталирането
 StatusClosingApplications=Затварят се приложения...
 StatusClosingApplications=Затварят се приложения...
 StatusCreateDirs=Създават се директории...
 StatusCreateDirs=Създават се директории...
 StatusExtractFiles=Извличат се файлове...
 StatusExtractFiles=Извличат се файлове...
+StatusDownloadFiles=Изтеглят се файлове...
 StatusCreateIcons=Създават се преки пътища...
 StatusCreateIcons=Създават се преки пътища...
 StatusCreateIniEntries=Създават се записи в INI файл...
 StatusCreateIniEntries=Създават се записи в INI файл...
 StatusCreateRegistryEntries=Създават се записи в регистъра...
 StatusCreateRegistryEntries=Създават се записи в регистъра...
@@ -305,8 +312,16 @@ ErrorIniEntry=Грешка при създаване на INI запис във
 ; *** Грешки при копиране на файлове
 ; *** Грешки при копиране на файлове
 FileAbortRetryIgnoreSkipNotRecommended=Прескочи този &файл (не се препоръчва)
 FileAbortRetryIgnoreSkipNotRecommended=Прескочи този &файл (не се препоръчва)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Пренебрегни грешката и продължи (не се препоръчва)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Пренебрегни грешката и продължи (не се препоръчва)
-SourceIsCorrupted=Файлът - източник е повреден
-SourceDoesntExist=Файлът - източник "%1" не съществува
+SourceIsCorrupted=Файлът източник е повреден
+SourceDoesntExist=Файлът източник "%1" не съществува
+SourceVerificationFailed=Проверката на файла източник беше неуспешна: %1
+VerificationSignatureDoesntExist=Файлът с подписи "%1" не съществува
+VerificationSignatureInvalid=Файлът с подписи "%1" е невалиден
+VerificationKeyNotFound=Файлът с подписи "%1" използва неизвестен ключ
+VerificationFileNameIncorrect=Името на файла е неправилно
+VerificationFileTagIncorrect=Етикетът на файла е неправилен
+VerificationFileSizeIncorrect=Размерът на файла е неправилен
+VerificationFileHashIncorrect=Контролната сума на файла е неправилна
 ExistingFileReadOnly2=Съществуващият файл не беше заменен, защото е маркиран само за четене.
 ExistingFileReadOnly2=Съществуващият файл не беше заменен, защото е маркиран само за четене.
 ExistingFileReadOnlyRetry=&Премахни атрибута „само за четене“ и опитай отново
 ExistingFileReadOnlyRetry=&Премахни атрибута „само за четене“ и опитай отново
 ExistingFileReadOnlyKeepExisting=&Запази съществуващия файл
 ExistingFileReadOnlyKeepExisting=&Запази съществуващия файл
@@ -325,6 +340,8 @@ ErrorChangingAttr=Грешка при опит за смяна на атрибу
 ErrorCreatingTemp=Грешка при опит за създаване на файл в целевата директория:
 ErrorCreatingTemp=Грешка при опит за създаване на файл в целевата директория:
 ErrorReadingSource=Грешка при опит за четене на файл - източник:
 ErrorReadingSource=Грешка при опит за четене на файл - източник:
 ErrorCopying=Грешка при опит за копиране на файл:
 ErrorCopying=Грешка при опит за копиране на файл:
+ErrorDownloading=Грешка при опит за изтегляне на файл:
+ErrorExtracting=Грешка при опит за извличане от архив:
 ErrorReplacingExistingFile=Грешка при опит за заместване на съществуващ файл:
 ErrorReplacingExistingFile=Грешка при опит за заместване на съществуващ файл:
 ErrorRestartReplace=Неуспешно отложено заместване:
 ErrorRestartReplace=Неуспешно отложено заместване:
 ErrorRenamingTemp=Грешка при опит за преименуване на файл в целевата директория:
 ErrorRenamingTemp=Грешка при опит за преименуване на файл в целевата директория:

+ 7 - 2
Files/Languages/Korean.isl

@@ -180,8 +180,8 @@ DirDoesntExist=폴더 %n%n%1%n%n이(가) 존재하지 않습니다, 폴더를 
 WizardSelectComponents=구성 요소 선택
 WizardSelectComponents=구성 요소 선택
 SelectComponentsDesc=어떤 구성 요소를 설치하시겠습니까?
 SelectComponentsDesc=어떤 구성 요소를 설치하시겠습니까?
 SelectComponentsLabel2=설치하려는 구성 요소를 선택합니다; 설치하지 않으려는 구성 요소의 선택을 취소합니다. 계속할 준비가 되면 다음을 클릭합니다.
 SelectComponentsLabel2=설치하려는 구성 요소를 선택합니다; 설치하지 않으려는 구성 요소의 선택을 취소합니다. 계속할 준비가 되면 다음을 클릭합니다.
-FullInstallation=모두 설치
-; 가능하면 'Compact'를 'Minimal'로 번역하지 마세요 (귀하의 언어로 '최소'를 의미합니다).
+FullInstallation=전체 설치
+; 가능하면 'Compact'를 '작은'으로 번역하지 마세요 (귀하의 언어로 '최소'를 의미합니다).
 CompactInstallation=최소 설치
 CompactInstallation=최소 설치
 CustomInstallation=사용자 지정 설치
 CustomInstallation=사용자 지정 설치
 NoUninstallWarningTitle=구성 요소가 존재합니다
 NoUninstallWarningTitle=구성 요소가 존재합니다
@@ -285,6 +285,9 @@ AbortRetryIgnoreSelectAction=작업 선택
 AbortRetryIgnoreRetry=재시도(&T)
 AbortRetryIgnoreRetry=재시도(&T)
 AbortRetryIgnoreIgnore=오류를 무시하고 진행(&I)
 AbortRetryIgnoreIgnore=오류를 무시하고 진행(&I)
 AbortRetryIgnoreCancel=설치 취소
 AbortRetryIgnoreCancel=설치 취소
+RetryCancelSelectAction=작업 선택
+RetryCancelRetry=재시도(&T)
+RetryCancelCancel=취소
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=응용 프로그램을 닫는 중...
 StatusClosingApplications=응용 프로그램을 닫는 중...
@@ -324,6 +327,8 @@ SourceVerificationFailed=소스 파일 검증 실패: %1
 VerificationSignatureDoesntExist=서명 파일 "%1"이 존재하지 않습니다
 VerificationSignatureDoesntExist=서명 파일 "%1"이 존재하지 않습니다
 VerificationSignatureInvalid=서명 파일 "%1"이 잘못되었습니다
 VerificationSignatureInvalid=서명 파일 "%1"이 잘못되었습니다
 VerificationKeyNotFound=서명 파일 "%1"이 알 수 없는 키를 사용합니다
 VerificationKeyNotFound=서명 파일 "%1"이 알 수 없는 키를 사용합니다
+VerificationFileNameIncorrect=파일 이름이 잘못되었습니다
+VerificationFileTagIncorrect=파일의 태그가 잘못되었습니다
 VerificationFileSizeIncorrect=파일 크기가 잘못되었습니다
 VerificationFileSizeIncorrect=파일 크기가 잘못되었습니다
 VerificationFileHashIncorrect=파일의 해시가 잘못되었습니다
 VerificationFileHashIncorrect=파일의 해시가 잘못되었습니다
 ExistingFileReadOnly2=읽기 전용으로 표시되어 있으므로 기존 파일을 교체할 수 없습니다.
 ExistingFileReadOnly2=읽기 전용으로 표시되어 있으므로 기존 파일을 교체할 수 없습니다.

+ 22 - 5
Files/Languages/Slovenian.isl

@@ -201,24 +201,27 @@ ReadyMemoGroup=Mapa v meniju 
 ReadyMemoTasks=Dodatna opravila:
 ReadyMemoTasks=Dodatna opravila:
 
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
-DownloadingLabel=Prenašam dodatne datoteke...
+DownloadingLabel2=Prenašam datoteke...
 ButtonStopDownload=Prekini preno&s
 ButtonStopDownload=Prekini preno&s
 StopDownload=Ali res želite prekiniti prenos?
 StopDownload=Ali res želite prekiniti prenos?
 ErrorDownloadAborted=Prenos prekinjen
 ErrorDownloadAborted=Prenos prekinjen
 ErrorDownloadFailed=Prenos ni uspel: %1 %2
 ErrorDownloadFailed=Prenos ni uspel: %1 %2
 ErrorDownloadSizeFailed=Pridobivanje velikosti ni uspelo: %1 %2
 ErrorDownloadSizeFailed=Pridobivanje velikosti ni uspelo: %1 %2
-ErrorFileHash1=Pridobivanje zgoščene vrednosti ni uspelo: %1
-ErrorFileHash2=Neveljavna zgoščena vrednost: pričakovana %1, dobljena %2
 ErrorProgress=Neveljaven potek: %1 od %2
 ErrorProgress=Neveljaven potek: %1 od %2
 ErrorFileSize=Neveljavna velikost datoteke: pričakovana %1, dobljena %2
 ErrorFileSize=Neveljavna velikost datoteke: pričakovana %1, dobljena %2
 
 
-; *** TExtractionWizardPage wizard page and Extract7ZipArchive
-ExtractionLabel=Razširjanje dodatnih datotek...
+; *** TExtractionWizardPage wizard page and ExtractArchive
+ExtractingLabel=Razširjanje datotek...
 ButtonStopExtraction=U&stavi razširjanje
 ButtonStopExtraction=U&stavi razširjanje
 StopExtraction=Ste prepričani, da želite ustaviti razširjanje datotek?
 StopExtraction=Ste prepričani, da želite ustaviti razširjanje datotek?
 ErrorExtractionAborted=Razširjanje datotek prekinjeno
 ErrorExtractionAborted=Razširjanje datotek prekinjeno
 ErrorExtractionFailed=Napaka pri razširjanju: %1
 ErrorExtractionFailed=Napaka pri razširjanju: %1
 
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=Napačno geslo
+ArchiveIsCorrupted=Arhivska datoteka je pokvarjena
+ArchiveUnsupportedFormat=Oblika arhiva ni podprta
+
 ; *** "Preparing to Install" wizard page
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Pripravljam za namestitev
 WizardPreparing=Pripravljam za namestitev
 PreparingDesc=Namestitveni program je pripravljen za namestitev programa [name] v vaš računalnik.
 PreparingDesc=Namestitveni program je pripravljen za namestitev programa [name] v vaš računalnik.
@@ -265,11 +268,15 @@ AbortRetryIgnoreSelectAction=Izberite dejanje
 AbortRetryIgnoreRetry=Poizkusi &znova
 AbortRetryIgnoreRetry=Poizkusi &znova
 AbortRetryIgnoreIgnore=&Prezri napako in nadaljuj
 AbortRetryIgnoreIgnore=&Prezri napako in nadaljuj
 AbortRetryIgnoreCancel=Prekliči namestitev
 AbortRetryIgnoreCancel=Prekliči namestitev
+RetryCancelSelectAction=Izberite dejanje
+RetryCancelRetry=Poizkusi &znova
+RetryCancelCancel=Prekliči
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=Zapiranje programov...
 StatusClosingApplications=Zapiranje programov...
 StatusCreateDirs=Ustvarjanje map...
 StatusCreateDirs=Ustvarjanje map...
 StatusExtractFiles=Razširjanje datotek...
 StatusExtractFiles=Razširjanje datotek...
+StatusDownloadFiles=Prenašanje datotek...
 StatusCreateIcons=Ustvarjanje bližnjic...
 StatusCreateIcons=Ustvarjanje bližnjic...
 StatusCreateIniEntries=Vpisovanje v INI datoteke...
 StatusCreateIniEntries=Vpisovanje v INI datoteke...
 StatusCreateRegistryEntries=Ustvarjanje vnosov v register...
 StatusCreateRegistryEntries=Ustvarjanje vnosov v register...
@@ -299,6 +306,14 @@ FileAbortRetryIgnoreSkipNotRecommended=Pre&sko
 FileAbortRetryIgnoreIgnoreNotRecommended=Prezr&i napako in nadaljuj (ni priporočeno)
 FileAbortRetryIgnoreIgnoreNotRecommended=Prezr&i napako in nadaljuj (ni priporočeno)
 SourceIsCorrupted=Izvorna datoteka je okvarjena
 SourceIsCorrupted=Izvorna datoteka je okvarjena
 SourceDoesntExist=Izvorna datoteka »%1« ne obstaja
 SourceDoesntExist=Izvorna datoteka »%1« ne obstaja
+SourceVerificationFailed=Preverjanje izvorne datoteke ni uspelo: %1
+VerificationSignatureDoesntExist=Podpisna datoteka »%1« ne obstaja
+VerificationSignatureInvalid=Podpisna datoteka »%1« ni veljavna
+VerificationKeyNotFound=Podpisna datoteka »%1« uporablja neznan ključ
+VerificationFileNameIncorrect=Ime datoteke ni pravilno
+VerificationFileTagIncorrect=Oznaka datoteke ni pravilna
+VerificationFileSizeIncorrect=Velikost datoteke ni pravilna
+VerificationFileHashIncorrect=Zgoščena vrednost datoteke ni pravilna
 ExistingFileReadOnly2=Obstoječe datoteke ni mogoče nadomestiti, ker ima oznako samo za branje.
 ExistingFileReadOnly2=Obstoječe datoteke ni mogoče nadomestiti, ker ima oznako samo za branje.
 ExistingFileReadOnlyRetry=Odst&rani oznako samo za branje in poizkusi ponovno
 ExistingFileReadOnlyRetry=Odst&rani oznako samo za branje in poizkusi ponovno
 ExistingFileReadOnlyKeepExisting=&Ohrani obstoječo datoteko
 ExistingFileReadOnlyKeepExisting=&Ohrani obstoječo datoteko
@@ -317,6 +332,8 @@ ErrorChangingAttr=Pri poskusu spremembe lastnosti datoteke je pri
 ErrorCreatingTemp=Pri ustvarjanju datoteke v ciljni mapi je prišlo do napake:
 ErrorCreatingTemp=Pri ustvarjanju datoteke v ciljni mapi je prišlo do napake:
 ErrorReadingSource=Pri branju izvorne datoteke je prišlo do napake:
 ErrorReadingSource=Pri branju izvorne datoteke je prišlo do napake:
 ErrorCopying=Pri kopiranju datoteke je prišlo do napake:
 ErrorCopying=Pri kopiranju datoteke je prišlo do napake:
+ErrorDownloading=Prišlo je do napake pri prenosu datoteke:
+ErrorExtracting=Prišlo je do napake pri razširjanju datoteke:
 ErrorReplacingExistingFile=Pri poskusu zamenjave obstoječe datoteke je prišlo do napake:
 ErrorReplacingExistingFile=Pri poskusu zamenjave obstoječe datoteke je prišlo do napake:
 ErrorRestartReplace=Napaka RestartReplace:
 ErrorRestartReplace=Napaka RestartReplace:
 ErrorRenamingTemp=Pri poskusu preimenovanja datoteke v ciljni mapi je prišlo do napake:
 ErrorRenamingTemp=Pri poskusu preimenovanja datoteke v ciljni mapi je prišlo do napake:

+ 4 - 3
Files/Languages/Ukrainian.isl

@@ -3,14 +3,14 @@
 ; E-Mail: [email protected]
 ; E-Mail: [email protected]
 ; Please report all spelling/grammar errors, and observations.
 ; Please report all spelling/grammar errors, and observations.
 ; Version 2020.08.04
 ; Version 2020.08.04
-; Updated and Reviewed on 20.06.2025 by Sergii Leonov ([email protected])
+; Updated and Reviewed on 21.06.2025 by Sergii Leonov ([email protected])
 
 
 ; *** Український переклад Inno Setup для версії 6.5.0 та вище***
 ; *** Український переклад Inno Setup для версії 6.5.0 та вище***
 ; Автор перекладу: Дмитро Онищук
 ; Автор перекладу: Дмитро Онищук
 ; E-Mail: [email protected]
 ; E-Mail: [email protected]
 ; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
 ; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
 ; Версія перекладу 2020.08.04
 ; Версія перекладу 2020.08.04
-; Оновлено та переглянуто 20.06.2025, Сергій Леонов ([email protected])
+; Оновлено та переглянуто 21.06.2025, Сергій Леонов ([email protected])
 
 
 [LangOptions]
 [LangOptions]
 LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
 LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
@@ -267,9 +267,10 @@ SetupAborted=Встановлення не завершено.%n%nБудь ла
 AbortRetryIgnoreSelectAction=Виберіть дію
 AbortRetryIgnoreSelectAction=Виберіть дію
 AbortRetryIgnoreRetry=&Спробувати знову
 AbortRetryIgnoreRetry=&Спробувати знову
 AbortRetryIgnoreIgnore=&Ігнорувати помилку та продовжити
 AbortRetryIgnoreIgnore=&Ігнорувати помилку та продовжити
-AbortRetryIgnoreCancel=Відмінити встановлення
+AbortRetryIgnoreCancel=Скасувати встановлення
 RetryCancelSelectAction=Виберіть дію
 RetryCancelSelectAction=Виберіть дію
 RetryCancelRetry=&Спробувати знову
 RetryCancelRetry=&Спробувати знову
+RetryCancelCancel=Скасувати
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=Закриття програм...
 StatusClosingApplications=Закриття програм...

+ 15 - 4
Projects/ISSigTool.dpr

@@ -122,15 +122,25 @@ end;
 
 
 procedure CommandExportPublicKey(const AFilename: String);
 procedure CommandExportPublicKey(const AFilename: String);
 begin
 begin
+  PrintFmtUnlessQuiet('%s: ', [AFilename], False);
+
   const Key = TECDSAKey.Create;
   const Key = TECDSAKey.Create;
   try
   try
     ImportKey(Key, False);
     ImportKey(Key, False);
 
 
     var PublicKeyText: String;
     var PublicKeyText: String;
     ISSigExportPublicKeyText(Key, PublicKeyText);
     ISSigExportPublicKeyText(Key, PublicKeyText);
-    ISSigSaveTextToFile(AFilename, PublicKeyText);
 
 
-    PrintFmtUnlessQuiet('Public key file created: "%s"', [AFilename]);
+    if NewFileExists(AFilename) then begin
+      const ExistingPublicKeyText = ISSigLoadTextFromFile(AFilename);
+      if ExistingPublicKeyText = PublicKeyText then begin
+        PrintUnlessQuiet('public key unchanged');
+        Exit;
+      end;
+    end;
+
+    ISSigSaveTextToFile(AFilename, PublicKeyText);
+    PrintUnlessQuiet('public key written');
   finally
   finally
     Key.Free;
     Key.Free;
   end;
   end;
@@ -141,6 +151,8 @@ begin
   if NewFileExists(Options.KeyFile) then
   if NewFileExists(Options.KeyFile) then
     RaiseFatalError('Key file already exists');
     RaiseFatalError('Key file already exists');
 
 
+  PrintFmtUnlessQuiet('%s: ', [Options.KeyFile], False);
+
   const Key = TECDSAKey.Create;
   const Key = TECDSAKey.Create;
   try
   try
     Key.GenerateKeyPair;
     Key.GenerateKeyPair;
@@ -148,8 +160,7 @@ begin
     var PrivateKeyText: String;
     var PrivateKeyText: String;
     ISSigExportPrivateKeyText(Key, PrivateKeyText);
     ISSigExportPrivateKeyText(Key, PrivateKeyText);
     ISSigSaveTextToFile(Options.KeyFile, PrivateKeyText);
     ISSigSaveTextToFile(Options.KeyFile, PrivateKeyText);
-
-    PrintFmtUnlessQuiet('Private key file created: "%s"', [Options.KeyFile]);
+    PrintUnlessQuiet('private key written');
   finally
   finally
     Key.Free;
     Key.Free;
   end;
   end;