我有一个包含以下结构的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语言特定文件,因此没有机会将这些消息包含在转换中。
答案 0 :(得分:2)
您无法在转换中使用组件(因为文件需要放在File表中,CAB中等等)。
如果您有一个中性的MSI文件,这意味着您的每种语言都有一个捆绑包,那么中性MSI具有功能和特定语言的一个。因此,每种语言都可以使用WiX软件包/ bootstrapper:中性MSI加一种语言。
为什么选择条件组件?在某些情况下,用户可以更改这些条件,修复会改变组件的安装状态(有时这是一个功能而不是错误)。语言作为功能可能更具可预测性。
对于所有语言特定数据,一个单独的MSI可能很有用,因此功能可以更改,但MSI语言不需要重建 - 但不会减小大小,这似乎是个问题。
另一个注意事项:有时使用合格的组件来提供此功能,例如,应用程序可以使用MsiProvideQualifiedComponentEx来安装相应的语言文件,但我不确定如果您的产品不是这样,它会对您的情况有所帮助多语言(但它是单一语言)。
如果您正在考虑变换,您可以全程查看补丁。您可以使用没有语言的基本MSI和包含(例如)de-de更改的另一个“相同”MSI(只要您小心使用组件),然后使用每种语言的补丁发送基本MSI,根据系统的补丁。捆绑可以应用基础加上适当的补丁。此外,还可以将修补程序应用于管理安装,因此您可以使用可安装的映像,但如果可以接受,则使用松散的文件。
Chris对转换添加松散的外部文件提出了一个有趣的观点,但是对于基本MSI所需的更改(标记混合文件,处理文件哈希等等)实际上是否可能实际可行(至少对我而言)并不清楚。