【问题标题】:Localized multilingual wix installer Does not display the values of string in .wxl files in the correct language本地化的多语言 wix 安装程序不会以正确的语言显示 .wxl 文件中的字符串值
【发布时间】:2016-04-18 09:17:11
【问题描述】:

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

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

任何从语言文件中获取其值的字符串 WixUI_da-DK.wxl ,不显示正确的语言它总是显示默认语言值,即英语

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

这里有什么问题以及如何解决它? 这是来自 .wxs 文件的我的用户界面

    <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 -->

【问题讨论】:

    标签: localization wix multilingual wix3.10


    【解决方案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 文件,然后从此处 https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/BrowseDlg.wxs 复制整个 xml。您还需要将

    Id 更改为“AppNameBrowseDlg”。现在,您可以将 Description 控件的宽度设置得更大,希望丹麦语文本能够正常显示。

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

    只需将 更改为

    您还需要修改这些行

    <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 的

    希望这会有所帮助。 git 存储库对于了解 wix 的实际工作原理非常有用。

    【讨论】:

    • 我添加了包含安装程序 UI 的 .wxs 文件的一部分
    • 我搜索了如何更改 UI 的大小,但我一无所获!你的意思是我必须添加自定义对话框?
    • 用水平线下方的更新更新了答案。希望这会有所帮助 =]
    • 非常感谢 :) ,, 我会试试这个并回复你:D
    • 我尝试了您建议的解决方案,但现在我可以构建并获得一个用于丹麦语的 .msi 和另一个用于英语的 .msi,但是现在我遇到了一个问题,即在我按照您所说的覆盖 wix 的 UI 之后我无法通过应用命令 wisubstg.vbs 来获取一个多语言 .msi 文件 ...我曾经使用它只为两种语言获取一个文件,现在当我在 .msi 文件上运行命令并开始安装它时,代码 2881 有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多