7

I made a custom panel for Inno-Setup and i want internationalization for this.

Can i use the *.isl files to add my translation keys or must i use the [custommessages]? And how can i access the keys in the [code] section.

Non of the inno-setup examples using the i18n.

thx Tom

4

2 回答 2

9

1.我可以修改isl本地化文件吗?

如果您修改标准 *.isl 文件或创建您自己修改过的文件,一切由您自己决定。请务必记住,如果您修改标准的,它们可能会被您安装的新版本的 Inno Setup 更新。这可能是许多人建议仅在该[CustomMessages]部分中创建条目的原因。

但是您当然可以创建一个单独的语言文件,您将与每个 Inno Setup 更新合并,或者更好,就像 Miral 建议的那样,在您自己的 *.isl 文件中指定您的自定义消息,然后在该部分的MessagesFile参数中[Languages]指定该文件位于逗号分隔的文件列表末尾:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl,compiler:YourEnMessages.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl,compiler:YourNlMessages.isl"

作为MessagesFile参数的参考状态:

当指定多个文件时,将按照指定的顺序读取它们,因此最后一个消息文件会覆盖先前文件中的任何消息。

因此,如果您只制作只有[CustomMessages]部分的 *.isl 文件并以上述方式在脚本中指定它们,您将不会破坏任何内容,您将获得单独的可重用语言文件。这种自定义 *.isl 文件的结构可能与以下[CustomMessages]部分完全一样:

[CustomMessages]
SomeCustomKey=Some custom value
...

如果您要在许多设置中重用这些自定义消息,则制作自己的语言文件可能对您更好。

2.如何从[代码]部分访问自定义消息?

通过使用CustomMessage函数。例如这种方式:

...

[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;
于 2013-07-11T07:45:33.000 回答
4

@TLama 提供的答案非常有用。我遇到了一个额外的问题,这与使用带有 params 的自定义消息有关

要定义自定义消息:

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

例如:

[CustomMessages]
...
NameAndVersion=%1 version %2
...

然后,要在代码部分使用它,只需将 FmtMessage 函数与 CustomMessage 函数一起使用:

例子:

S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']);
// S = 'My Program version 1.0'
于 2014-09-11T08:36:53.740 回答