我们正在使用WIX [Windows Installer XML]来构建MSI,我们不关心MSI中的UI按钮或文本本地化,我唯一想要翻译的是第二或第三个出现的许可证文本安装程序的页面。从用户的角度来看,最简单的方法是使用组合框来选择语言并更改下面的许可文本字段。
<Control Id="LanguageComboBox"
Type="ComboBox"
Sorted="yes"
ComboList="yes"
Property="LANGUAGE"
X="86"
Y="52"
Width="200"
Height="15">
<ComboBox Property="LANGUAGE">
<ListItem Text="English"
Value="IT_Upgrade_Mgr_October_2015_FINAL_en-us"/>
Setting up License text:
<Control Id="LicenseText"
Type="ScrollableText"
Property ="EULATEXT"
X="20"
Y="75"
Width="330"
Height="125"
Sunken="yes"
TabSkip="no">
<Text SourceFile="EULA\[LANGUAGE].rtf" />
我设法通过引入组合框来修改现有的安装程序,但是我很难激发事件来更改语言,它应该自动更改EULA,我有18个不同的EULA RTF文件用于不同的语言。 组合框活动: 使用组合框及其设置属性发布[LANGUAGE]属性。
更新: 我能用Query编写自定义操作但它不起作用? view = session.Database.OpenView(“UPDATE Control SET Text ='”+ sRTFText +“'WHERE Dialog _ ='LicenseAgreementDlg'AND Control ='LicenseText'”); view.Execute();
由于Scrollable文本不采用动态值并且只能在构建时更改,因此只有解决方案是使用正在运行的会话对象的DTF更新MSI ttables,如果您的团队做了类似的事情,请告诉我。< / p>
答案 0 :(得分:0)
更新表(可能早已读过,因此更新它们不太可能有帮助)。而是创建多个ScrollableText控件,每个语言一个控件,每个控件都有一对hide
and show
Conditions,动态隐藏所选语言的所有控件。
答案 1 :(得分:0)
能够通过自定义操作解决问题:
//reading the License text from control table
var view = session.Database.OpenView("SELECT * FROM Control WHERE Dialog_='LicenseAgreementDlg_loc' AND Control='LicenseText'");
view.Execute();
var record = view.Fetch();
view.Delete(record);
//adding new record with new value
record.SetString("Text", sRtfText);
view.Modify(ViewModifyMode.InsertTemporary, record);