我在安装程序中使用三种语言,目前我正在脚本中执行所有重写操作。下面是一个例子:
[Messages]
en.SetupWindowTitle=Setup - %1 {#AppVersion}
ru.SetupWindowTitle=Установка - %1 {#AppVersion}
ua.SetupWindowTitle=Встановлення - %1 {#AppVersion}
en.SetupAppRunningError=Setup has detected that {#SetupSetting('VersionInfoOriginalFileName')} is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.
ru.SetupAppRunningError=Обнаружен запущенный экземпляр {#SetupSetting('VersionInfoOriginalFileName')}.%n%nПожалуйста, закройте все экземпляры приложения, затем нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти.
ua.SetupAppRunningError=Виявлено запущений екземпляр {#SetupSetting('VersionInfoOriginalFileName')}.%n%nБудь ласка, закрийте всі копії програми та натисніть «OK» для продовження, або «Скасувати» для виходу.
[CustomMessages]
en.AppRunningError=Setup has detected that {#AppExeName} is currently running.%n%nPlease, close the {#AppExeName} application, then click «OK» to continue or «Cancel» to exit.
ru.AppRunningError=В памяти находится {#AppExeName}.%n%nЗавершите работу {#AppExeName} и нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти.
ua.AppRunningError=В пам'яті знаходиться {#AppExeName}.%n%nЗавершіть роботу {#AppExeName} та натисніть «OK» для продовження, або «Скасувати» для виходу. 我在脚本中覆盖了很多消息。我想知道,在考虑到我使用的预处理器指令( .isl )的情况下,向{#...}文件传输所有这些重写的最有效方法是什么。我可以使用FmtMessage(...),但这意味着我必须对每一条消息都包含FmtMessage(...)。
发布于 2020-11-23 12:17:29
首先检查一下,是否有一些较小的侵入性解决方案可能无法满足您的需求:
Can I use .isl files for the messages with preprocessor directives in Inno Setup?
如果您想在.isl文件中获得完整的预处理器支持,可以通过实际的Inno设置预处理器传递它们:
defines.iss)://定义#定义AppVersion "1.2.3“//更多定义. //支持代码#定义PreprocessedTranslationFile GetEnv("TEMP") + "\lang.isl”#定义SavePreprocessedTranslation() SavePreprocessedTranslation()
#包括"defines.iss"
SavePreprocessedTranslation:#expr SavePreprocessedTranslation()
iscc。当然会失败,因为.isl不是有效的.iss,但是iscc的预处理部分应该完成并创建预处理的.isl文件。# DebugPreprocessLanguage 0#定义PreprocessLanguage(路径)\ Local = "C:\Program (x86)\Inno Setup 6\ISCC.exe",\ DeleteFileNow(PreprocessedTranslationFile),\ Local1 = DebugPreprocessLanguage?SourcePath + "\islpreprocess.log“:"nul",\ Local2 = "/C”+Local+“+ Path +”+ ">>“+”Local1 +“”2>&1“,\ Exec("cmd",Local2,SourcePath,SW_HIDE),\ (FileExists(PreprocessedTranslationFile) x x\\Path+”未能预处理“),\ Local3 = GetEnv("TEMP") + "\“+ExtractFileName(路径),\ CopyFile(PreprocessedTranslationFile,Local3),\ DeleteFileNow(PreprocessedTranslationFile),\ Local3
[Languages]部分中使用预处理的.isl文件。语言名称:"en";MessagesFile:{#PreprocessLanguage("Default.isl")}名称:"nl";MessagesFile:
如果有问题,请将DebugPreprocessLanguage设置为1以查看.isl预处理器输出。
您甚至可以通过让预处理程序在调用..isl之前将#include "defines.iss"和#expr SavePreprocessedTranslation()自动添加到..isl中来改进这个过程。
https://stackoverflow.com/questions/64967700
复制相似问题