Как я могу записать LanguageID в реестр в Inno Setup? - PullRequest
2 голосов
/ 26 марта 2020

У меня есть 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 я должен поставить соответствующий LanuageID. Я мог бы поставить эти числа вручную, но мне интересно, есть ли способ извлечь LanguageID из его имени или чего-то еще.

1 Ответ

1 голос
/ 26 марта 2020

Вы можете использовать препроцессор для одновременной генерации записей [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 в конец сценария , чтобы увидеть сгенерированный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...