我正在尝试设置使用Wix开发的MSI安装程序以支持多语言UI,因此我创建了Strings_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>
然后从Product.wxs
文件:
<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)">
我立即收到错误:
错误CNDL0276:代码页'!(loc.Codepage)'不是有效的Windows 代码页。请检查您的产品/ @代码页属性值 源文件。
那我在这里做错了什么?
答案 0 :(得分:1)
由于缺乏任何答复,我将得出结论认为这是不可能的。
我不确定这是微软的错误还是Wix解析器中的一些遗漏?执行此操作的唯一方法是将代码页编号硬编码到.wxs文件本身,这非常不方便,因为在重新编译其他语言时必须将其切换为适当的代码页编号。除此之外,最近谁在使用代码页呢?
PS。为了一劳永逸地修复它,我尝试这样做(就像它应该从一开始就完成):
Codepage="UTF-8"
它已编译但生成的MSI文件的UI如下所示:)
答案 1 :(得分:0)
扩展元素WixLocalization
的属性@Codepage
会覆盖指定的Product/@Codepage
。从链接页面:
结果数据库的代码页整数值或Web名称。您也可以指定-1,它不会重置数据库代码页。
同样相关,如果问题中没有直接提及,本地化字符串会出现在最终的MSI中有两个不同的地方:在摘要信息流和安装程序数据库中。有关详细信息,请参阅MSI Databases and Code Pages。 SIS的代码页由属性Package/@SummaryCodepage
指定,您可以在其中使用!(loc)
变量。