使用Wix进行MSI安装程序本地化的斗争
我正在尝试设置使用Wix开发的MSI安装程序以支持多语言UI,因此我创建了使用Wix进行MSI安装程序本地化的斗争,wix,windows-installer,Wix,Windows Installer,我正在尝试设置使用Wix开发的MSI安装程序以支持多语言UI,因此我创建了Strings\u en-us.wxl文件以包含以下内容: <?xml version="1.0" encoding="utf-8"?> <WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization"> <String Id="Language">1033</
Strings\u en-us.wxl
文件以包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="Language">1033</String>
<String Id="Codepage">1252</String>
<String Id="DowngradeErrorMessage">A newer version of [ProductName] is already installed.</String>
</WixLocalization>
我立即得到一个错误:
错误CNDL0276:代码页'!(loc.Codepage)“”不是有效的窗口
代码页。请检查您的应用程序中的Product/@Codepage属性值
源文件
那么,我做错了什么呢?从没有任何答复来看,我会得出结论,这是不可能的 我不确定这是微软的错还是Wix解析器中的遗漏?唯一的方法是将代码页码硬编码到.wxs文件本身,这非常不方便,因为在为不同语言重新编译时,必须将其切换到适当的代码页码。除此之外,现在到底是谁在使用代码页 另外,为了一劳永逸地解决这个问题,我试着这样做(就像从一开始就应该这样做): 它已编译,但生成的MSI文件的UI如下所示:) 扩展元素具有一个属性
@Codepage
,该属性覆盖指定的产品/@Codepage
。从链接页面:
结果数据库的代码页整数值或web名称。您还可以指定-1,它将不会重置数据库代码页
同样相关的是,如果问题中没有直接提到,那么本地化字符串在最终MSI中会出现在两个不同的位置:摘要信息流和安装程序数据库中。有关更多信息,请参阅。SIS的代码页由属性
Package/@SummaryCodepage
指定,您可以在该属性中使用!(loc)
变量。我在这方面没有经验,但。。。Windows Installer使用代码页获取摘要信息和字符串。它们有不同的用法和限制。您不能将任何Unicode代码页ID放入Product/@codepage中。这些链接可能有助于:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="$(var.ProduceCode)"
Name="TestSetupProject1"
Version="$(var.Version)"
Language="!(loc.Language)"
Codepage="!(loc.Codepage)"
Manufacturer="$(var.CompanyName)"
UpgradeCode="$(var.UpgradeCode)">
Codepage="UTF-8"