2

我正在尝试设置使用 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 代码页。请检查源文件中的 Product/@Codepage 属性值。

那么我在这里做错了什么?

4

2 回答 2

1

从没有任何回复来看,我将得出结论,这是不可能的。

我不确定这是微软的错还是 Wix 解析器中的一些遗漏?做到这一点的唯一方法是将代码页号硬编码到 .wxs 文件本身中,这非常不方便,因为在为不同的语言重新编译时必须将其切换到适当的代码页号。除此之外,这些天谁在使用代码页?

PS。为了一劳永逸地修复它,我尝试这样做(就像它应该从一开始就完成一样):

Codepage="UTF-8"

它已编译,但生成的 MSI 文件的 UI 看起来像这样 :)

在此处输入图像描述

于 2013-07-12T20:30:58.547 回答
0

扩展元素WixLocalization具有@Codepage覆盖指定的属性的属性Product/@Codepage。从链接页面:

结果数据库的代码页整数值或 Web 名称。您还可以指定 -1 不会重置数据库代码页。

同样相关的是,如果问题中没有直接提及,则本地化字符串出现在最终 MSI 中的两个不同位置:摘要信息流中和安装程序数据库中。有关详细信息,请参阅MSI 数据库和代码页。SIS 的代码页由属性指定Package/@SummaryCodepage,您可以在其中使用!(loc)变量。

于 2013-11-19T15:01:21.200 回答