WiX Toolset 如何按字面显示本地化文本中的方括号?
数据小陈
可以。在本地化字符串中,需要按字面显示的 [ 写成 [\[],] 写成 [\]]。只使用 [ 和 ] 无法阻止 Windows Installer 后续解析方括号。
为什么 XML 字符引用没有解决问题?
XML 解析时会先把 [ 和 ] 还原为普通方括号。字符串随后经过 Windows Installer 的 Formatted 处理,形如 [PropertyName] 的内容会被解析为属性引用;如果属性名无效,对应片段会变成空字符串。
Windows Installer 使用 [\x] 转义语法输出单个字面字符:[\[] 输出 [,[\]] 输出 ]。具体规则见 Microsoft 的 Formatted 文档。
如何修改本地化字符串?
替换原字符串中表示方括号的字符引用,保留其他字符和空格:
<String Id="XRDatabaseURLHint" Value="Server (Format <Server FQDN or IP-Address >[\[]< \Instance <[\[],<Port >[\]][\]]):"></String>
控件继续引用同一个本地化资源:
<Control Id="ServerDescription" Type="Text" X="15" Y="50" Width="300" Height="10" Transparent="yes" NoPrefix="yes" Text="!(loc.XRDatabaseURLHint)" />
按上述转义规则,修改后的字符串应显示为:
Server (Format <Server FQDN or IP-Address >[< \Instance <[,<Port >]]):
修改时需要注意什么?
- 每个需要显示的方括号都要分别转义,包括内层方括号。
- 真正需要解析的属性引用,例如
[ProductName],应保留原写法。 - XML 中的反斜杠不需要写成双反斜杠。示例保留了原来的
\,它表示一个反斜杠。 - 原始
Value与问题中手写的预期文本在尖括号和空格上有差异。示例只修正了方括号转义;如果要求显示结果逐字符一致,还需要调整这些字符。
备注:内容仅供参考。
