首页 > 解决方案 > 如何在 Inno Setup 中将 LanguageID 写入注册表?

问题描述

我有 3 种语言,所以我写了这个:

Root: HKLM; Subkey: "SOFTWARE\Company\Office\Client"; ValueType: dword; ValueName: "LocaleID"; ValueData: "?"; Languages: en
Root: HKLM; Subkey: "SOFTWARE\Company\Office\Client"; ValueType: dword; ValueName: "LocaleID"; ValueData: "?"; Languages: ru
Root: HKLM; Subkey: "SOFTWARE\Company\Office4\Client"; ValueType: dword; ValueName: "LocaleID"; ValueData: "?"; Languages: ua

在该ValueData字段中,我必须输入相应的 LanguageID($0419用于俄语、$1058乌克兰语和$0409英语等)。我可以手动输入这些数字,但我想知道是否有办法从其名称或其他内容中提取 LanguageID。

标签: registryinno-setup

解决方案


您可以使用预处理器同时生成[Languages][Registry]条目。预处理器具有ReadIni功能,您可以使用它LanguageID.isl文件中读取。

#define AddLanguage(Name, File) \
  "[Languages]" + NewLine + \
  "Name: " + Name + "; MessagesFile: ""compiler:" + File + """" + NewLine + \
  "[Registry]" + NewLine + \
  "Root: HKLM; Subkey: ""SOFTWARE\Company\Office\Client""; ValueType: dword; " + \
    "ValueName: ""LocaleID""; " + \
    "ValueData: " + ReadIni(CompilerPath + File, "LangOptions", "LanguageID") + "; " + \
    "Languages: " + Name + NewLine

#emit AddLanguage("en", "Default.isl")
#emit AddLanguage("ru", "Languages\Russian.isl")
#emit AddLanguage("uk", "Languages\Ukrainian.isl")

这将生成这样的代码(换行并添加空行以提高可读性):

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Company\Office\Client"; ValueType: dword; \
  ValueName: "LocaleID"; ValueData: $0409; Languages: en

[Languages]
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Company\Office\Client"; ValueType: dword; \
  ValueName: "LocaleID"; ValueData: $0419; Languages: ru

[Languages]
Name: uk; MessagesFile: "compiler:Languages\Ukrainian.isl"

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Company\Office\Client"; ValueType: dword; \
  ValueName: "LocaleID"; ValueData: $0422; Languages: uk

添加SaveToFile到脚本的末尾以查看生成的代码。


推荐阅读