在转换中包含组件
Include components in transforms
我有一个包含以下结构的 wix 项目文件:
cultures
- en
- profile.mo
- de
- profile.mo
...
我正在创建几个包含本地化 MSI 字符串的 MSI 文件。
我想要实现的是 "de" 和其他语言的文件包含在特定的 MSI 文件中。
这将大大减少设置的整体大小。目前我正在使用基于本地化的条件:
<Component Id="compLangDePluginMo" Guid="{YOUR-GUID}" >
<Condition><![CDATA["!(loc.Localization)" = "de-de"]]></Condition>
<File Id="fLangDePluginMo" Name="plugin.mo" Source="$(var.ProjectRef.ProjectDir)catalogs\de\de.mo" />
</Component>
在每个 WXL 文件中都有一个像
这样的语句
<String Overridable="yes" Id="Localization">en-us</String>
或
<String Overridable="yes" Id="Localization">de-de</String>
缺点是所有 MSI 文件都包含所有特定于语言的文件。
P.S。 MO 文件只是一个例子。我们正在处理大约几 MB 的语言特定文件,因此没有机会只将消息包含在转换中。
您不能在转换中包含组件(因为文件需要进入文件 table、CAB 等)。
如果您有一个中性 MSI 文件,这意味着您将拥有每种语言的捆绑包,具有功能的中性 MSI 和特定于语言的文件。因此,您可以为每种语言提供 WiX bundle/bootstrapper:中性 MSI 加一种语言。
为什么选择条件组件?在某些情况下,用户可以更改这些条件,并且修复会改变组件的安装状态(有时这是一个功能而不是错误)。作为特征的语言可能更具有预测性table。
还有一个用于所有语言特定数据的单独 MSI 可能很有用,这样功能就可以改变,但语言 MSI 不需要重建——尽管不会减小大小,这似乎是问题所在。
另一个注意事项:有时使用限定组件来提供此功能,例如,应用程序可以使用 MsiProvideQualifiedComponentEx 安装适当的语言文件,但我不确定如果您的产品是否对您有帮助不是多语言(但它是单一语言)。
如果您正在考虑转换,不妨从头到尾查看补丁。您可以拥有没有语言的基本 MSI 和另一个包含(例如)de-de 更改的 "identical" MSI(只要您对组件小心),然后为基本 MSI 提供每种语言的补丁, 根据系统打补丁。捆绑包可以应用基础加上适当的补丁。还可以将补丁应用到管理安装,这样您就可以得到一个可安装的映像,但带有松散的文件,如果那是 acceptable。
Chris 关于添加松散外部文件的转换提出了一个有趣的观点,但目前还不清楚(至少对我而言)考虑到基本 MSI 所需的更改(标记混合文件、处理文件哈希等)是否真的可行在)。
我有一个包含以下结构的 wix 项目文件:
cultures
- en
- profile.mo
- de
- profile.mo
...
我正在创建几个包含本地化 MSI 字符串的 MSI 文件。
我想要实现的是 "de" 和其他语言的文件包含在特定的 MSI 文件中。
这将大大减少设置的整体大小。目前我正在使用基于本地化的条件:
<Component Id="compLangDePluginMo" Guid="{YOUR-GUID}" >
<Condition><![CDATA["!(loc.Localization)" = "de-de"]]></Condition>
<File Id="fLangDePluginMo" Name="plugin.mo" Source="$(var.ProjectRef.ProjectDir)catalogs\de\de.mo" />
</Component>
在每个 WXL 文件中都有一个像
这样的语句<String Overridable="yes" Id="Localization">en-us</String>
或
<String Overridable="yes" Id="Localization">de-de</String>
缺点是所有 MSI 文件都包含所有特定于语言的文件。
P.S。 MO 文件只是一个例子。我们正在处理大约几 MB 的语言特定文件,因此没有机会只将消息包含在转换中。
您不能在转换中包含组件(因为文件需要进入文件 table、CAB 等)。
如果您有一个中性 MSI 文件,这意味着您将拥有每种语言的捆绑包,具有功能的中性 MSI 和特定于语言的文件。因此,您可以为每种语言提供 WiX bundle/bootstrapper:中性 MSI 加一种语言。
为什么选择条件组件?在某些情况下,用户可以更改这些条件,并且修复会改变组件的安装状态(有时这是一个功能而不是错误)。作为特征的语言可能更具有预测性table。
还有一个用于所有语言特定数据的单独 MSI 可能很有用,这样功能就可以改变,但语言 MSI 不需要重建——尽管不会减小大小,这似乎是问题所在。
另一个注意事项:有时使用限定组件来提供此功能,例如,应用程序可以使用 MsiProvideQualifiedComponentEx 安装适当的语言文件,但我不确定如果您的产品是否对您有帮助不是多语言(但它是单一语言)。
如果您正在考虑转换,不妨从头到尾查看补丁。您可以拥有没有语言的基本 MSI 和另一个包含(例如)de-de 更改的 "identical" MSI(只要您对组件小心),然后为基本 MSI 提供每种语言的补丁, 根据系统打补丁。捆绑包可以应用基础加上适当的补丁。还可以将补丁应用到管理安装,这样您就可以得到一个可安装的映像,但带有松散的文件,如果那是 acceptable。
Chris 关于添加松散外部文件的转换提出了一个有趣的观点,但目前还不清楚(至少对我而言)考虑到基本 MSI 所需的更改(标记混合文件、处理文件哈希等)是否真的可行在)。