هل من الممكن توطين EULA في WIX باستخدام ملف .wxl؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

يتم ترجمة المثبت الخاص بي ، الذي تم إنشاؤه WTH عبر ملفات .wxl. من الممكن في WIX تحديد ثقافات متعددة وسيتم استدعاء Light.exe عدة مرات ، مما يؤدي إلى إنشاء مثبت لكل لغة (هذا متاح أثناء إنشاء المثبت من Visual Studio).

جميع ملفات العمل باستثناء EULA. يتم تعريفه في ملف .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 / Buitio Build و Call Light.exe عدة مرات ، وتحديد ملف ترخيص مختلف في كل مرة عبر مفتاح سطر الأوامر -D.

هل هو أي طريقة لحل هذه المشكلة واستخدام ملفات EULA المترجمة بحيث يمكن بناء المشروع في VisualStudio + Voltive دون الحاجة إلى نسخ الكثير من الحوار؟ يعد توطين المثبتات مشكلة شائعة جدًا ، لذلك ربما يوجد بعض الحلول التي لا أعرف عنها؟

هل كانت مفيدة؟

المحلول

هناك طريقة أخرى للقيام بذلك ، وعلى الرغم من أنها فوضوية بعض الشيء ، إلا أنها أقل فوضى من الحلتين الذي ذكرته OP. والائتمان عند استحقاق الائتمان ، فإن هذه الإجابة تقارب 100 ٪ بناءً على هذا المنشور http://weblogs.sqlteam.com/mladenp/archive/2010/04/15/wix-3-tutorial-custom-eula-license-and-msi-localization.aspx بقلم ملادين براجدي.

ويستند ما يلي على WIX 3.5.

يمكنك إنشاء نسخة معدلة قليلاً من مربع حوار LicenseAgreementDLG وإدراجها في مشروعك.

<?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 - للمجموعات الأخرى ، مثل 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 ...

أشير أساسيات واجهة المستخدم في Wix Wiki لمزيد من المعلومات.

توطين تولا هو بسيط جدا. أضف ScrollableText تحكم في أحد الحوارات الخاصة بك. الرجوع إلى سلسلة توطين في عنصر النص من التحكم في ScrollableText.

<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 السيطرة ، في هذه الحالة يسمى الترخيص. أضف سلسلة RTF RAW الخاصة بك تولا ك CDATA عنصر سلسلة التوطين.

للحصول على بيانات RAW ، قم بإنشاء ملف RTF باستخدام WordPad ، على سبيل المثال. افتح ملف RTF مع المفكرة ونسخ محتواه. الصق هذا المحتوى في 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>

لذا فإن مفتاح تضمين متعددة تولا هو استخدام بيانات RTF RAW في ملفات التوطين المعنية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top