PAYATHON 2026

WiX Toolset 如何按字面显示本地化文本中的方括号?

数据小陈

可以。在本地化字符串中,需要按字面显示的 [ 写成 [\[],] 写成 [\]]。只使用 [ 和 ] 无法阻止 Windows Installer 后续解析方括号。

为什么 XML 字符引用没有解决问题?

XML 解析时会先把 [ 和 ] 还原为普通方括号。字符串随后经过 Windows Installer 的 Formatted 处理,形如 [PropertyName] 的内容会被解析为属性引用;如果属性名无效,对应片段会变成空字符串。

Windows Installer 使用 [\x] 转义语法输出单个字面字符:[\[] 输出 [,[\]] 输出 ]。具体规则见 Microsoft 的 Formatted 文档。

如何修改本地化字符串?

替换原字符串中表示方括号的字符引用,保留其他字符和空格:

<String Id="XRDatabaseURLHint" Value="Server (Format &lt;Server FQDN or IP-Address &gt;[\[]&lt; &#92;Instance &lt;[\[],&lt;Port &gt;[\]][\]]):"></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 中的反斜杠不需要写成双反斜杠。示例保留了原来的 &#92;,它表示一个反斜杠。
  • 原始 Value 与问题中手写的预期文本在尖括号和空格上有差异。示例只修正了方括号转义;如果要求显示结果逐字符一致,还需要调整这些字符。

备注:内容仅供参考。