本地化多语言wix安装程序不以正确的语言显示.wxl文件中的字符串值

时间:2016-04-18 09:17:12

标签: localization wix multilingual wix3.10

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

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

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

另一个问题是内置字符串以某种形式用丹麦语切断。Cut off built in text

这里有什么问题以及如何解决?  launch is always in English     这是来自.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 -->

1 个答案:

答案 0 :(得分:1)

如果您的文字被截断,则需要更改用户界面的尺寸。

无论您使用什么控件来显示该文本,其宽度都会更大。 我无法评论“启动应用程序名称”文本始终是英语,因为没有足够的有关该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。您需要更改&lt; Dialog&gt;我也是“AppNameBrowseDlg”。现在,您可以使Description控件的宽度更大,以便丹麦文本正确适合。

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

只需更改&lt; DialogRef Id =“BrowseDlg”&gt; to&lt; DialogRef Id =“AppNameBrowseDlg”&gt;

您还需要修改这些行

<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替换默认浏览的lib和希望符合丹麦文本的UI。我还会考虑在这里提交一个wix改进https://github.com/wixtoolset/issues/issues,要求WixUI的浏览描述控件更广泛。

对于您的启动文本,您会遇到英语,因为您使用英语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安装程序无法自动显示复选框的背景,而不是您在链接的屏幕截图中看到的灰色任何其他颜色。如果你想摆脱文本后面的灰色,你可以实际上修改复选框控件的宽度和高度大约是复选框本身的大小,并将文本设置为“”。然后,您需要将另一个Text控件添加到用于访问复选框文本的位置的UI。这样你就不会在文本后面留下任何灰色背景。这样做的缺点是,您必须单击实际复选框以切换是否已选中,而在单击灰色区域中的任何位置之前。

同样,要正确引用此新对话框,您需要转到AppName_InstallDir.wxs文件并将ExitDialog引用更改为AppNameExitDlg,并更改一个&lt; Publish&gt;引用ExitDialog。

希望这会有所帮助。 git存储库对于理解wix如何真正起作用非常有用。