Internationalization 用于自定义面板的Inno设置i18n

Internationalization 用于自定义面板的Inno设置i18n,internationalization,installation,inno-setup,Internationalization,Installation,Inno Setup,我为Inno设置制作了一个自定义面板,我希望实现国际化 我可以使用*.isl文件添加我的翻译密钥,还是必须使用[custommessages]?以及如何访问[代码]部分中的键 使用i18n的inno设置示例中没有一个 thx 汤姆。我可以修改isl本地化文件吗? 如果您修改标准的*.isl文件,或者创建自己修改过的文件,则由您自行决定。请务必记住,如果您修改了标准版本,它们可能会被您安装的新版本的Inno安装程序更新。这可能就是为什么许多人建议只在部分中创建条目的原因 但您当然可以创建一个单独的

我为Inno设置制作了一个自定义面板,我希望实现国际化

我可以使用*.isl文件添加我的翻译密钥,还是必须使用[custommessages]?以及如何访问[代码]部分中的键

使用i18n的inno设置示例中没有一个

thx 汤姆。我可以修改isl本地化文件吗?

如果您修改标准的*.isl文件,或者创建自己修改过的文件,则由您自行决定。请务必记住,如果您修改了标准版本,它们可能会被您安装的新版本的Inno安装程序更新。这可能就是为什么许多人建议只在部分中创建条目的原因

但您当然可以创建一个单独的语言文件,并将其与每个Inno安装程序更新合并,或者更好地,如Miral所建议的,在您自己的*.isl文件中指定自定义消息,然后在该部分的
MessagesFile
参数中,在逗号分隔的文件列表末尾指定该文件:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl,compiler:YourEnMessages.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl,compiler:YourNlMessages.isl"
作为
消息文件
参数的参考状态:

当指定多个文件时,将按其读取顺序读取这些文件 指定,因此最后一个消息文件将覆盖 以前的文件

因此,如果您仅使用
[CustomMessages]
节创建*.isl文件,并在脚本中以上述方式指定它们,则不会破坏任何内容,您将获得单独的可重用语言文件。此类自定义*.isl文件的结构可能非常类似于
[CustomMessages]
部分:

[CustomMessages]
SomeCustomKey=Some custom value
...
如果您打算在许多设置中重用这些自定义消息,那么创建自己的语言文件可能会更好

2。如何从[代码]部分访问自定义邮件?

通过使用函数。例如:

...

[CustomMessages]
; the following key value pair can be moved to the *.isl file into the same
; named file section, if needed; as a downside of doing that you'll need to
; keep track of changes if you update Inno Setup itself
SomeCustomKey=Some custom value

[Code]
procedure InitializeWizard;
var
  S: string;
begin
  S := CustomMessage('SomeCustomKey');
  MsgBox(S, mbInformation, MB_OK);
end;

@TLama提供的答案非常有用。我还面临另一个问题,这与使用带有参数的自定义消息有关

要定义自定义消息,请执行以下操作:

消息可能包含从%1到%9的参数。您可以重新排列参数的顺序(即将%2移到%1之前),如果需要还可以复制参数(即%1…%1%2”)。在带有参数的消息上,使用两个连续的“%”字符嵌入单个“%”。“%n”创建换行符

例如:

[CustomMessages]
...
NameAndVersion=%1 version %2
...
S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']);
// S = 'My Program version 1.0'
然后,要在代码部分使用它,只需将FmtMessage函数与CustomMessage函数一起使用:

示例:

[CustomMessages]
...
NameAndVersion=%1 version %2
...
S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']);
// S = 'My Program version 1.0'

我建议不要直接修改标准的
.isl
文件。相反,您可以创建一个新的
.isl
文件,该文件只包含您希望修改或添加的消息。然后,您可以使用这两个文件,方法是#包括自定义文件中的标准文件,或者在中指定这两个文件(最后一个自定义文件)。这非常有用,唯一缺少的是当这些消息具有参数(例如,%1,,%9)时如何在代码中使用自定义消息。