将 Inno Setup 安装程序语言映射到要存储在 INI 文件中的数字代码

Map Inno Setup installer language to numeric codes to be stored in an INI file

我想将 Inno Setup 安装程序语言映射到一些数字代码。

代码应存储到 INI 文件中,如下所示:

[ini]
FileName: "{app}\lang.ini"; Section: "General"; Key: "language"; \
    String: "{code:GetLanguateID}";

以下数字对应的语言:

英语:31
日语: 59
德语: 42
法语: 37
意大利语: 58
韩语: 66
西班牙语: 111
葡萄牙语:91

只需将 {language} constant 的值与语言名称和 return 对应的(数字)值进行比较:

function GetLanguateID(Param: string): string;
begin
  case ExpandConstant('{language}') of
    'english':  Result := '31';
    'japanese': Result := '59';
    'german':   Result := '42';
    // etc...
    else RaiseException('Unexpected language');
  end;
end;

您也可以在没有任何 Pascal 脚本代码的情况下实现同样的效果:

[INI]
FileName: "{app}\lang.ini"; Section: "General"; Key: "language"; \
    String: "31"; Languages: english
FileName: "{app}\lang.ini"; Section: "General"; Key: "language"; \
    String: "59"; Languages: japanese
FileName: "{app}\lang.ini"; Section: "General"; Key: "language"; \
    String: "42"; Languages: german
; etc ...

为避免重复,您可以使用预处理器:

[INI]
#define MapLanguage(Language, Code) \
    "FileName: ""{app}\lang.ini""; Section: ""General""; Key: ""language""; " + \
        "String: """ + Code + """; Languages: " + Language
#emit MapLanguage("english", "31")
#emit MapLanguage("japanese", "59")
#emit MapLanguage("german", "42")
; etc ...