本地化的多语言 wix 安装程序不以正确的语言显示 .wxl 文件中的字符串值
Localized multilingual wix installer Does not display the values of string in .wxl files in the correct language
我使用 wix 工具集 3.10 创建了 .msi 安装程序。我已将安装程序本地化为多语言(只有一个 .msi 文件显示语言,具体取决于 windows 的区域设置)。
我创建了 da-DK.mst 文件,我使用 wisubstg.vbs 将语言嵌入到英语 .msi 文件中,所以我有一个多语言安装程序适用于丹麦语和英语,但我有两个问题
任何从语言文件中获取其值的字符串
WixUI_da-DK.wxl ,不显示正确的语言,它始终显示默认语言值,即英语
另一个问题是内置字符串在某些形式的丹麦语中被截断。
这是什么问题,如何解决?
这是我的 UI 来自 .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 -->
如果您的文字被截断,您需要更改 UI 的尺寸。
无论您使用什么控件来显示该文本,都要使其宽度更大。
我无法评论 "Launch App Name" 文本始终是英文,因为关于 UI 控件或它显示的文本的信息不足。您需要添加更多有关您正在使用的 UI 的信息。
这是 wix 的默认对话框 link
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。您还需要将
要使用这个新对话框,您还需要添加另一个 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 将默认的 browsedlg 替换为有望适合丹麦语文本的浏览器。我也会考虑在这里提交一个 wix 改进 https://github.com/wixtoolset/issues/issues 要求 WixUI 的 browsedlg 的描述控件更宽。
对于您的 Launch 文本,您遇到了英语问题,因为您使用英语 msi 作为其他语言的基础。此复选框的实现方式意味着您正在硬编码 属性 中的英文文本,该复选框控件的文本值设置为。您本地化 msi 的方式可能是创建多个字符串 tables 并在运行时从适当的 table 中选择字符串。但是,复选框不会从字符串 table 中获取其文本值。相反,它来自 属性 的值,该值被设置为 "LaunchApp" 的值。 (顺便说一句,如果您使用丹麦语版本的 msi 作为基础,则此文本将始终是丹麦语)。
我们可以用与修改 Wix BrowseDlg 大致相同的方法来修复此问题。在这种情况下,我们希望从此处 https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/ExitDialog.wxs
将 ExitDialog 复制到 AppNameExitDialog.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 安装程序无法自动将复选框的背景显示为您在 link 编辑的屏幕截图中看到的灰色以外的任何其他颜色。如果你想摆脱文本后面的灰色,实际上可以修改复选框控件的宽度和高度,使其与复选框本身的大小相当,并将文本设置为“”。然后,您需要向 UI 添加另一个文本控件,该控件位于复选框文本过去所在的位置。这样你就不会在文本后面有任何灰色背景。这样做的缺点是您必须单击实际的复选框来切换是否选中它,而之前您可以单击灰色区域中的任意位置。
同样,要正确引用这个新对话框,您需要转到 AppName_InstallDir.wxs 文件并将 ExitDialog 引用更改为 AppNameExitDlg,同时更改引用 ExitDialog 的 。
希望这对您有所帮助。 git 存储库对于了解 wix 的真正工作原理非常有用。
我使用 wix 工具集 3.10 创建了 .msi 安装程序。我已将安装程序本地化为多语言(只有一个 .msi 文件显示语言,具体取决于 windows 的区域设置)。
我创建了 da-DK.mst 文件,我使用 wisubstg.vbs 将语言嵌入到英语 .msi 文件中,所以我有一个多语言安装程序适用于丹麦语和英语,但我有两个问题
任何从语言文件中获取其值的字符串 WixUI_da-DK.wxl ,不显示正确的语言,它始终显示默认语言值,即英语
另一个问题是内置字符串在某些形式的丹麦语中被截断。
这是什么问题,如何解决?
<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 -->
如果您的文字被截断,您需要更改 UI 的尺寸。
无论您使用什么控件来显示该文本,都要使其宽度更大。 我无法评论 "Launch App Name" 文本始终是英文,因为关于 UI 控件或它显示的文本的信息不足。您需要添加更多有关您正在使用的 UI 的信息。
这是 wix 的默认对话框 link 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。您还需要将
要使用这个新对话框,您还需要添加另一个 wxs 文件,您可以将其命名为 AppName_InstallDir.wxs,这将是此 https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/WixUI_InstallDir.wxs 的副本。这里需要把
只需将
您还需要修改这些行
<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 将默认的 browsedlg 替换为有望适合丹麦语文本的浏览器。我也会考虑在这里提交一个 wix 改进 https://github.com/wixtoolset/issues/issues 要求 WixUI 的 browsedlg 的描述控件更宽。
对于您的 Launch 文本,您遇到了英语问题,因为您使用英语 msi 作为其他语言的基础。此复选框的实现方式意味着您正在硬编码 属性 中的英文文本,该复选框控件的文本值设置为。您本地化 msi 的方式可能是创建多个字符串 tables 并在运行时从适当的 table 中选择字符串。但是,复选框不会从字符串 table 中获取其文本值。相反,它来自 属性 的值,该值被设置为 "LaunchApp" 的值。 (顺便说一句,如果您使用丹麦语版本的 msi 作为基础,则此文本将始终是丹麦语)。
我们可以用与修改 Wix BrowseDlg 大致相同的方法来修复此问题。在这种情况下,我们希望从此处 https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/ExitDialog.wxs
将 ExitDialog 复制到 AppNameExitDialog.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 安装程序无法自动将复选框的背景显示为您在 link 编辑的屏幕截图中看到的灰色以外的任何其他颜色。如果你想摆脱文本后面的灰色,实际上可以修改复选框控件的宽度和高度,使其与复选框本身的大小相当,并将文本设置为“”。然后,您需要向 UI 添加另一个文本控件,该控件位于复选框文本过去所在的位置。这样你就不会在文本后面有任何灰色背景。这样做的缺点是您必须单击实际的复选框来切换是否选中它,而之前您可以单击灰色区域中的任意位置。
同样,要正确引用这个新对话框,您需要转到 AppName_InstallDir.wxs 文件并将 ExitDialog 引用更改为 AppNameExitDlg,同时更改引用 ExitDialog 的
希望这对您有所帮助。 git 存储库对于了解 wix 的真正工作原理非常有用。