Можно ли локализовать eula в wix с помощью файла .wxl?

StackOverflow https://stackoverflow.com/questions/3627633

  •  26-09-2019
  •  | 
  •  

Вопрос

Мой установщик, созданный WTH WIX локализован через файлы .wxl. В WIX можно указать несколько культур, и Light.exe будет называться несколько раз, создавая установщик для каждого языка (это доступно во время создания установщика из Visual Studio).

Все работает файл, кроме Vula. Он определен в файле .wxs через

<WixVariable Id='WixUILicenseRtf' Value='en.rtf' />

И я не знаю хорошего способа изменить это значение из файла локализации .wxl. С использованием

<WixVariable Id='WixUILicenseRtf' Value='!(loc.EulaFile)' />
<String Id='EulaFile'>en.rtf</String>

Не работает, файлы SICE .WXL используются по ссылке, а .wxs скомпилирован перед ними, поэтому компилятор не может найти !(loc.EulaFile). Отказ Поиск форумов Я нашел две обходные пути. Во-первых, состоит в том, чтобы создать пользовательский лицензионный диалог для каждого языка - кажется, он работает, но это очень сложный путь и источник подушки. Второй способ состоит в том, чтобы сбросить сборку Visual Studio / Woteive и вызовов Light.exe несколько раз, указав другой файл лицензий каждый раз, когда-нибудь клавиши командной строки.

Это любой способ решить эту проблему и использовать локализованные файлы EULA, поэтому проект может быть встроен в VisualStudio + вовлечение без необходимости копировать множество диалогов? Локализация установщиков является очень распространенной проблемой, поэтому, возможно, какое-то решение существует, о которых я не знаю?

Это было полезно?

Решение

Есть еще один способ сделать это, и хотя это немного грязно, что это менее грязно, чем два обработка ОП. И кредит, где должный кредит, этот ответ почти на 100% на основе этого поста http://weblogs.sqlteam.com/mladenp/archive/2010/04/15/wix-3-tutorialial-custom-eula-license-and-msi-localization.aspx. MLADEN PRAJDIć.

Ниже приведено в WIX 3.5.

Вы создаете слегка модифицированную копию диалогового окна LicenseArementDLG и включите его в свой проект.

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) Microsoft Corporation.  All rights reserved.

    The use and distribution terms for this software are covered by the
    Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
    which can be found in the file CPL.TXT at the root of this distribution.
    By using this software in any fashion, you are agreeing to be bound by
    the terms of this license.

    You must not remove this notice, or any other, from this software.
-->

<!-- This is a modified version of LicenseAgreementDlg to support selection of localized versions of 
     the license file. It is very much based on this article: 
     http://sqlserverpedia.com/blog/sql-server-bloggers/wix-3-tutorial-custom-eula-license-and-msi-localization/  -->

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <UI>
            <Dialog Id="LicenseAgreementKludge" Width="370" Height="270" Title="!(loc.LicenseAgreementDlg_Title)">
                <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)" />
                <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
                <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
                <Control Id="Description" Type="Text" X="25" Y="23" Width="340" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.LicenseAgreementDlgDescription)" />
                <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.LicenseAgreementDlgTitle)" />
                <Control Id="LicenseAcceptedCheckBox" Type="CheckBox" X="20" Y="207" Width="330" Height="18" CheckBoxValue="1" Property="LicenseAcceptedKludge" Text="!(loc.LicenseAgreementDlgLicenseAcceptedCheckBox)" />
                <Control Id="Print" Type="PushButton" X="112" Y="243" Width="56" Height="17" Text="!(loc.WixUIPrint)">
                    <Publish Event="DoAction" Value="WixUIPrintEula">1</Publish>
                </Control>
                <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
                <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
                    <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">!(wix.WixUICostingPopupOptOut) OR CostingComplete = 1</Publish>
                    <Condition Action="disable"><![CDATA[LicenseAcceptedKludge <> "1"]]></Condition>
                    <Condition Action="enable">LicenseAcceptedKludge = "1"</Condition>
                </Control>
                <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
                    <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
                </Control>
                <Control Id="LicenseText" Type="ScrollableText" X="20" Y="60" Width="330" Height="140" Sunken="yes" TabSkip="no">
                    <Text SourceFile="$(var.ProjectDir)\!(loc.LicenseRtf)" />  <!-- this value has been modified -->
                </Control>
            </Dialog>
        </UI>
    </Fragment>
</Wix>

В вашем основном исходном файле Wix вы добавляете следующий код в «Патч», в новом диалоговом окне в последовательность диалога вместо оригинального:

  <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementKludge">1</Publish>
  <Publish Dialog="LicenseAgreementKludge" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
  <Publish Dialog="LicenseAgreementKludge" Control="Next" Event="NewDialog" Value="InstallDirDlg">LicenseAcceptedKludge = "1"</Publish>
  <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementKludge">1</Publish>

Обратите внимание, что это основано на использовании диалога Wixui_InstallDir Dialog - для других коллекций, таких как wixui_mondo, вам, вероятно, придется изменить вышеизложенное, глядя на источник.

Наконец, в каждом из ваших файлов локализации вы размещаете одну строку:

<String Id="LicenseRtf">en-us\MerliniaSMSGatewayLicense.en-us.rtf</String>

<String Id="LicenseRtf">da-dk\MerliniaSMSGatewayLicense.da-dk.rtf</String>

И, конечно же, вы помещаете локализованный файл лицензионов, как указано. Я размещаю лицензионные файлы (и файлы локализации) в подпапках, но это не нужно.

Как я уже сказал, это немного грязно, но это работает.

Другие советы

Лучшее решение является самым простым, просто используйте WixUILicenseRtf переменная в командной строке при указании вашего .wxl файл.

light -loc setup_fr-FR.wxl -dWixUILicenseRtf=EULA_fr-FR.rtf ...

Ссылаться Основы пользовательского интерфейса На Wiki Wiki для получения дополнительной информации.

Локализация Варья очень просто Добавить ScrollableText. Управляйте одним из ваших диалогов. Ссылка строка локализации в текстовом элементе управления Scrolletext.

<Control Id="LicenseText" Type="ScrollableText" X="20" Y="60" Width="330" Height="140" Sunken="yes" TabSkip="no">
  <Text>!(loc.License)</Text>
</Control>

Далее создайте файл локализации, скажите для американского английского языка. Назовите файл en-us.wxl. Создайте строковый элемент локализации в файле локализации, который использует идентификатор, указанный в текстовом элементе ScrollableText. Контроль, в этом случае это называется лицензией. Добавьте строку RAW RTF вашего Варья как CDATA Элемент строки локализации.

Чтобы получить необработанные данные, например, создайте файл RTF со WordPad. Откройте этот файл RTF с помощью Notepad и скопируйте его контент. Вставить этот контент в CDATA Элемент строкового элемента локализации. Быть уверенным Опустить все пробелы между строкой и CDATA Теги.

Пример локализованного элемента строки следует:

<String Id="License"><![CDATA[{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang7\f0\fs22 American EULA.}]]></String>

Так что ключ, чтобы включить несколько Eula's. Для использования данных RAW RTF в соответствующих файлах локализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top