0

我使用 wix 工具集 3.10 创建了 .msi 安装程序。我已将安装程序本地化为多语言(只有一个 .msi 文件,根据 Windows 的区域设置显示语言)。

我创建了 da-DK.mst 文件并使用 wisubstg.vbs 将语言嵌入到英语 .msi 文件中,因此我有一个适用于丹麦语和英语的多语言安装程序,但我遇到了两个问题

任何从语言文件(即 WixUI_da-DK.wxl)获取其值的字符串都不会显示正确的语言,它始终显示默认语言值,即英语

另一个问题是内置的字符串在丹麦语中以某些形式被截断。切断内置文本

这里有什么问题以及如何解决? 启动总是用英文 这是 .wxs 文件中的我的 UI

    <UI>

          <UIRef Id="WixUI_InstallDir"/>
          <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Order="2">1</Publish>
          <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>
          <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
        </UI>

        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
        <Icon Id="icon.ico" SourceFile=".....\Images\Img_app.ico"/>
        <Property Id="ARPPRODUCTICON" Value="icon.ico" />

        <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT"  Value="!(loc.LaunchApp)"  />
        <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"  />

<!-- end snippet -->
4

1 回答 1

1

如果您的文本被截断,您需要更改 UI 的尺寸。

无论您使用什么控件来显示该文本,都会使其宽度变大。我无法评论始终为英文的“启动应用程序名称”文本,因为没有足够的关于该 UI 控件或其显示的文本的信息。您需要添加一些有关您正在使用的 UI 的更多信息。


这是 wix 默认对话框的链接 https://github.com/wixtoolset/wix3/tree/develop/src/ext/UIExtension/wixlib

在 browsedlg.wxs 中,您定义了此控件。

<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgDescription)" />

不幸的是,丹麦语在这里的描述相当长,因此安装程序会切断文本并使用省略号。

我认为解决此问题的最简单方法是在您的项目中添加一个名为 AppNameBrowseDlg.wxs 的新 wxs 文件,然后从此处复制整个 xml https://github.com/wixtoolset/wix3/blob/develop/src/ext /UIExtension/wixlib/BrowseDlg.wxs。您还需要将 <Dialog> Id 更改为“AppNameBrowseDlg”。现在,您可以将 Description 控件的宽度设置得更大,希望丹麦语文本能够正确匹配。

要使用这个新对话框,您还需要添加另一个 wxs 文件,您可以将其命名为 AppName_InstallDir.wxs,这将是此https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/的副本wixlib/WixUI_InstallDir.wxs。此处需要将 <UI> Id 更改为 AppName_InstallDir

只需将 <DialogRef Id="BrowseDlg"> 更改为 <DialogRef Id="AppNameBrowseDlg">

您还需要修改这些行

<Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
<Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>

<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>

引用您的 AppNameBrowseDlg

这实质上复制了您在安装程序中使用的对话框和 UI 定义。在您的产品中,您只需将 UIRef 更改为“AppName_InstallDir”,它将使用您定义的 UI,该 UI 将默认的 browsedlg 替换为希望适合丹麦文本的 UI。我也会考虑在这里提交一个 wix 改进https://github.com/wixtoolset/issues/issues要求 WixUI 的browsedlg 的描述控制更广泛。

对于您的启动文本,您会遇到英语问题,因为您使用英语 msi 作为其他语言的基础。实现此复选框的方式意味着您正在硬编码复选框控件的文本值设置为的属性中的英文文本。您本地化 msi 的方式可能是创建多个字符串表并在运行时从适当的表中选择字符串。但是,复选框不会从字符串表中获取其文本值。相反,它来自被设置为“LaunchApp”值的属性值。(顺便说一句,如果您使用丹麦语版本的 msi 作为基础,则此文本将始终是丹麦语)。

我们可以通过与修改 Wix BrowseDlg 大致相同的方式来解决此问题。在这种情况下,我们想从这里将 ExitDialog 复制到 AppNameExitDialog.wxs https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/ExitDialog.wxs

您需要将 Dialog Id 重命名为 AppNameExitDialog 然后我们要查看此控件

<Control Id="OptionalCheckBox" Type="CheckBox" X="135" Y="190" Width="220" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]">
    <Condition Action="show">WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed</Condition>
</Control>

您想将其更改为以下

<Control Id="OptionalCheckBox" Type="CheckBox" X="135" Y="190" Width="220" Height="40" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="!(loc.LaunchApp)" />

此外,Windows 安装程序无法自动将复选框的背景显示为您在链接的屏幕截图中看到的灰色以外的任何其他颜色。如果你想摆脱文本后面的这种灰色,你实际上可以将复选框控件的宽度和高度修改为大约复选框本身的大小并将文本设置为“”。然后,您需要向 UI 中添加另一个 Text 控件,该控件位于复选框文本所在的位置。这样,文本后面就不会有任何灰色背景。这样做的缺点是您必须单击实际的复选框来切换它是否被选中,而在您可以单击灰色区域中的任何位置之前。

同样,要正确引用这个新对话框,您需要转到 AppName_InstallDir.wxs 文件并将 ExitDialog 引用更改为 AppNameExitDlg,并更改引用 ExitDialog 的 <Publish>。

希望这可以帮助。git 存储库对于了解 wix 的真正工作原理非常有用。

于 2016-04-18T20:59:11.067 回答