registry - 如何在 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。
解决方案
您可以使用预处理器同时生成[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
到脚本的末尾以查看生成的代码。
推荐阅读
- github - 使用 GitHub 使页面上线
- angular - 如何在 Angular 2+ 中基于组件创建模板?
- python-3.x - 在 igraph 上使用 cairo 绘图时出错:模块 'cairo' 没有属性 'Surface'
- join - awk 匹配/比较/每个文件中的 2 列(对于 2 个文件)
- geocoding - 您已超出此 API 的每日请求配额。甚至使用 api 密钥
- spring - 无法代理接口实现方法 [public final void AbstractTestNGSpringContextTests.setApplicationContext()]
- vba - 通过输入框输入的数字未链接到我在 B 列中的公式
- ruby - 如何使用 selenium 网格对 appium 运行并行测试?
- angular - 根据从另一个 primeNg 多选下拉列表中选择/取消选择的值,从 primeNg 多选下拉列表中添加/删除项目/值
- objective-c - NSTableView 在屏幕外隐藏行