Попытка сделать многоязычный установщик - процесс работает в целом, но, похоже, происходит сбой для локализованных файлов, которые должны быть установлены.
Каждый из локализованных установщиков отлично работает как автономный и устанавливаетлокализованные файлы, такие как eula.pdf.
Я надеюсь, что мне просто не хватает флажка на этапе генерации преобразования (или, возможно, используется неправильный инструмент?)
Процесс запускаетсяимея набор инсталляторов 1 для каждого языка.
Чтобы собрать каждый инсталлятор, мы «освещаем», используя опцию -b "folder"
и -loc "folder"
, чтобы указать каждый язык, который включает некоторое альтернативное содержимое файла, такое как лицензия.pdf.
Файлы для локализации имеют общее имя источника
<File Id='License.pdf' Name='eula.pdf' Source='License(EULA).pdf' KeyPath='yes'/>
<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
Папки, например,
en-US/License(EULA).pdf
en-US/License.rtf
en-US/Product.wxl
fr-FR/License(EULA).pdf
fr-FR/License.rtf
fr-FR/Product.wxl
Есть также некоторые файлы, такие как binary.dll.и binary.exe, которые не локализованы и одинаковы для всех MSI - не ожидайте увидеть их в MST.
Следующим шагом в процессе является созданиеразница MST между базовым языком (английским) и каждым другим языком.Использование Windows\v7.1\Bin\MsiTran.exe
из Window SDK
MST выглядит немного маловато для изменения содержимого.
Объединение всех файлов MST в один установщик с использованием Windows\v7.1\Samples\sysmgmt\msi\scripts\wisubstg.vbs
При установке на языке, отличном от английского, весь пользовательский интерфейс программы установки, включая версию лицензии rtf, локализован, но файл eula.pdf на диске всегда является базовым английским языком.
Использование задач Ant-dotnet длязапустить сборку (если она имеет значение) Задача сборки MSI
<wix mode="light" target="${outlocation}\${lang.folder}\my.msi" wixHome="${wixhome}">
<lightArg line="-b "${location}""/> <!-- provide the location of the signable binaries -->
<lightArg line="-b "${msiwixsource}\Localisation\${lang.folder}""/> <!-- provide the location of the localisation -->
<lightArg line="-sice:ICE57"/>
<lightArg line="-cultures:${lang.culture}"/>
<lightArg line="-loc "${msiwixsource}\Localisation\${lang.folder}\Product.wxl""/>
<lightArg line="-ext "${wixhome}\WixUtilExtension.dll""/>
<lightArg line="-ext "${wixhome}\WixUIExtension.dll""/>
<lightArg line="-ext "${wixhome}\WixFirewallExtension.dll""/>
<lightArg line="-ext "${wixhome}\WixNetFxExtension.dll""/>
<sources dir="${msiwixobjects}">
<include name="*.wixobj"/>
</sources>
<moresources dir="${msiwixsource}\Localisation\${lang.folder}">
<include name="*"/>
</moresources>
<moresources dir="${location}">
<include name="binary.dll,binary.exe"/>
</moresources>
</wix>
Задача преобразования
<exec executable="${windowsSDKBin}">
<arg value="-g"/>
<arg value="${outlocation}\en-US\my.msi"/>
<arg value="${outlocation}\${lang.folder}\my.msi"/>
<arg value="${outlocation}\${lang.folder}\my.mst"/>
</exec>
Задача перепаковки
<exec executable="cscript">
<arg value="${windowsSDKMsi}"/>
<arg value="${outlocation}\my.msi"/>
<arg value="${outlocation}\${lang.folder}\my.mst"/>
<arg value="${lang.id}"/>
</exec>
Product /@Language = "! (Loc.Lang)", указанный в Product.wxl для английского языка, мы перечислили все 1033,1028,1029,1031,1036,1040,1041,1043,1045,1046,2052,3082
для других языков, только специфические, такие как 1036
для fr-FR