2010-09-02 7 views
6

मेरा इंस्टॉलर, wth WiX बनाया गया .wxl फ़ाइलों के माध्यम से स्थानीयकृत किया गया है। वाईआईएक्स में कई संस्कृतियों को निर्दिष्ट करना संभव है और light.exe को कई बार कहा जाएगा, प्रत्येक भाषा के लिए इंस्टॉलर बनाना (यह विजुअल स्टूडियो से इंस्टॉलर बनाने के दौरान उपलब्ध है)।क्या .wxl फ़ाइल का उपयोग कर वाईएक्स में ईयूएलए को स्थानांतरित करना संभव है?

ईयूएलए को छोड़कर सभी कार्य फ़ाइल। यह के माध्यम से

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

.wxs फ़ाइल में परिभाषित किया गया है और मुझे .wxl स्थानीयकरण फ़ाइल से मान बदलने के लिए एक अच्छा तरीका है पता नहीं है। का उपयोग करते हुए

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

काम नहीं कर रहा है, साईस .wxl फ़ाइलें लिंक-टाइम और .wxs पर उपयोग किया जाता है उन्हें पहले संकलित किया गया है, इसलिए संकलक !(loc.EulaFile) नहीं मिल रहा। खोज मंचों में मुझे दो कामकाज मिल गए हैं। सबसे पहले प्रत्येक भाषा के लिए एक कस्टम लाइसेंस संवाद बनाना है - ऐसा लगता है कि यह काम करता है, लेकिन यह एक बहुत ही कठिन तरीका है और ब्लूट स्रोत कोड बहुत है। दूसरा तरीका विजुअल स्टूडियो/वोटिव बिल्ड को छोड़ना है और light.exe को कई बार कॉल करना है, प्रत्येक बार -d कमांड-लाइन कुंजी के माध्यम से अलग-अलग लाइसेंस फ़ाइल निर्दिष्ट करना।

यह इस समस्या का समाधान और स्थानीय EULA फ़ाइलें उपयोग करती हैं इसलिए परियोजना कॉपी-पेस्ट करने के लिए संवाद के बहुत सारे एक आवश्यकता के बिना VisualStudio + Voltive में बनाया जा सकता है के लिए कोई तरीका है? स्थानीयकरण इंस्टॉलर एक बहुत ही आम समस्या है, तो हो सकता है कि कुछ समाधान मौजूद हैं जो मुझे नहीं पता?

उत्तर

5

एक और तरीका यह करने के लिए नहीं है, और हालांकि यह थोड़ा गन्दा है यह दो तरीके दिए ओपी उल्लेख किया है की तुलना में कम गंदा है। और क्रेडिट जहां क्रेडिट देय है, यह जवाब Mladen Prajdić द्वारा http://weblogs.sqlteam.com/mladenp/archive/2010/04/15/WiX-3-Tutorial-Custom-EULA-License-and-MSI-localization.aspx पर इस पोस्ट के आधार पर लगभग 100% है।

निम्नलिखित वाईएक्स 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> 

और, बेशक, आप स्थानीय लाइसेंस फ़ाइल के रूप में इंगित जगह। मैं subfolders में लाइसेंस फ़ाइलों (और स्थानीयकरण फाइलें) रख रहा हूँ, लेकिन यह आवश्यक नहीं है।

जैसा मैंने कहा, यह थोड़ा गन्दा है, लेकिन यह काम करता है।

+0

इसे WiX 3.7 में काम नहीं कर सकता है। क्या WiX 3.0 के बाद से टेक्स्ट एलिमेंट से स्थानीयकरण समर्थन हटा दिया गया है? – ivan

+0

@ivan यह मेरे लिए वाईएक्स 3.7 के साथ ठीक काम कर रहा है। – RenniePet

+0

उपयोगकर्ता @kadorken, एक सुझाए गए संपादन में, निम्नलिखित नोट किया गया: "सुनिश्चित करें कि आप अपने यूआईआरआईफ़ आईडी =" WixUI_InstallDir "निर्देश के प्रभावी होने के बाद पैच प्रकाशित निर्देश डाल दें।" – RenniePet

7

सर्वश्रेष्ठ समाधान सबसे आसान है, बस फ़ाइल निर्दिष्ट करते समय कमांड लाइन पर WixUILicenseRtf चर का उपयोग करें।

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

अधिक जानकारी के लिए वाईएक्स विकी पर User Interface Basics देखें।

+0

बहुत बहुत धन्यवाद! जैसा कि आपने कहा; सबसे अच्छा समाधान सबसे सरल है! आपने मेरा दिन बचा लिया! – Sander

1

EULA लोकलाइजिंग बहुत सरल है। स्क्रॉल करने योग्य टेक्स्ट अपने किसी एक संवाद पर नियंत्रण जोड़ें। 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 नाम दें। स्थानीयकरण फ़ाइल में एक स्थानीयकरण स्ट्रिंग तत्व बनाएं जो के टेक्स्ट तत्व में संदर्भित पहचानकर्ता का उपयोग करता है स्क्रॉल करने योग्य टेक्स्ट नियंत्रण, इस मामले में इसे लाइसेंस कहा जाता है। स्थानीयकरण स्ट्रिंग के सीडीएटीए तत्व के रूप में ईयूएलए की कच्ची आरटीएफ स्ट्रिंग जोड़ें।

कच्चे डेटा प्राप्त करने के लिए, वर्डपैड के साथ एक आरटीएफ फ़ाइल बनाएं, उदाहरण के लिए। नोटपैड के साथ उस आरटीएफ फ़ाइल को खोलें और इसकी सामग्री कॉपी करें। उस सामग्री को स्थानीयकरण स्ट्रिंग तत्व के सीडीएटीए तत्व में पेस्ट करें। स्ट्रिंग और सीडीएटीए टैग के बीच सभी व्हाइटस्पेस को छोड़ दें।

एक उदाहरण स्थानीय स्ट्रिंग तत्व इस प्रकार है:

<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 के संबंधित स्थानीयकरण फाइलों में कच्चे rtf डेटा का उपयोग करने के लिए है के लिए महत्वपूर्ण।

संबंधित मुद्दे

 संबंधित मुद्दे