Вопрос по localization, burn, visual-studio-2010, wix3.6, wix – Создание локализованных загрузчиков WIX 3.6.

13

Я создал проект WIX в Visual Studio 2010 более года назад. Он создает файл MSI и загрузчик setup.exe. На самом деле, он создает эту пару файлов для двух языков - английского и французского. Я только сейчас интегрирую этот проект в наши сборки TFS CI. У меня проблемы с получением сборки CI для генерации файлов bootstrapper setup.exe.

Недавно мы обновили Wix на всех наших серверах сборки до Wix 3.6 RC. Поэтому я решил попробовать Burn вместо того, чтобы использовать старый стиль загрузчика. Я добавил новый проект Bootstrapper в свое решение. Проект начальной загрузки включает в себя простой bundle.wxs, который просто загружает MSI, сгенерированный моим старым проектом MSI. Однако, когда я пытаюсь собрать, я получаю следующую ошибку:

error LGHT0103: The system cannot find the file 'C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\fr-fr\LaunchPad.msi;C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\en-us\LaunchPad.msi'.

Моя ссылка на пакет в комплекте выглядит так:

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" />

LaunchPad.Wix - это название проекта Wix MSI. Если я изменю проект LaunchPad.Wix, чтобы создать только один язык, он будет работать нормально. Мне кажется, что тип проекта загрузчика просто не поддерживает сборку установочных файлов для нескольких языков. Это правда? Любые предложения для обхода?

Edit

После дальнейшего изучения, мне интересно, поддерживают ли проекты начальной загрузки локализацию. Я попытался настроить мой проект Wix MSI для создания только fr-fr. Setup.exe, который мой проект загрузчика создал с английским языком. Когда я редактирую свойства проекта для проекта начальной загрузки, & quot; Культуры для сборки & quot; поле заблокировано и пусто. Как бы мне построить неанглийский загрузчик? Возможно ли это еще?

В этом проекте CodePlex есть пример локализации загрузчика с исходным кодом:classicwixburntheme.codeplex.com Morten Frederiksen

Ваш Ответ

2   ответа
20

Здесь происходит несколько вещей:

  1. If you use multiple Cultures, you can't use TargetPath in something outside MSBuild that expects a single filename. As you found, TargetPath is a list of the localized files that were built. However, you can use TargetPath if you qualify the .msi package's output language: <MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

  2. If you want to create one bootstrapper that can install either/both en-US and fr-FR, you'll need to list each .msi package separately in its own MsiPackage element.

  3. If you want to create two bootstrappers, one en-US and one fr-FR, you'll need to invoke the bootstrapper .wixproj twice, once for each language. Bootstrappers don't support the Cultures "trick" -- it's problematic to produce two outputs from a single invocation of MSBuild (witness the TargetPath problem).

Если вы используете WixStandardBootstrapperApplication, он автоматически пытается локализовать пользовательский интерфейс на основе языка пользовательского интерфейса, возвращаясь к языку системного интерфейса и, наконец, возвращаясь к английскому. Он ищет локализованные строки в каталогах, названных в честь LCID, поэтому у вас есть такие полезные данные:

<Payload Name="1033\thm.wxl" SourceFile="..." />
<Payload Name="1036\thm.wxl" SourceFile="..." />

К сожалению, строки WixStandardBootstrapperApplication в настоящее время доступны только для en-US. Вот почему загрузчик fr-FR показывает пользовательский интерфейс на английском языке. Вам необходимо локализовать исходный файл WiX HyperlinkTheme.wxl или RtfTheme.wxl (в зависимости от используемой темы). Оба эти файла находятся в каталоге src \ ext \ BalExtension \ wixstdba \ Resources.

Правильно. Если вы локализуете загрузчик, вам понадобится только один .msi. Или вы можете пойти еще дальше и переместить код в один .msi, а локализованные ресурсы - в один .msi для каждого языка. Это не сэкономило бы вам много всего лишь двумя языками, но я работал над продуктами, которые поставлялись с дюжиной языков, и это экономило место и упрощало исправление, так как вы обычно исправляете код, а не ресурсы.
Я хочу создать один загрузчик, который может устанавливать en-US / fr-FR / ko-KO / th-TH / ar-SA / el-GR, который автоматически определяет текущий язык системы, а затем переводить строки интерфейса в язык системы. , Как мне этого добиться? В загрузчике есть один тег, атрибут WixStandardBootstrapperApplication / @ LocalizationFile, который необходимо выбрать вручную, как он может автоматически выбирать его в соответствии с языком системы?
Наши установочные пакеты en-US и fr-FR идентичны, за исключением строк пользовательского интерфейса WIX. Я только сейчас заметил, что установщик записи вообще не показывает пользовательский интерфейс MSI. Есть ли способ заставить загрузчик записи использовать мой пользовательский интерфейс MSI вместо пользовательского интерфейса записи? Если это так, я мог бы создать два проекта - по одному для каждого MSI (en-US и FR-FR). Похоже, мой другой вариант будет один загрузчик. Я создал бы пользовательский интерфейс в записи (с переводами как на en-US, так и на fr-FR). Burn отобразит правильный перевод в зависимости от настройки языка операционной системы пользователя. Звучит ли это правильно? Matt Varblow
4

хорошо. это работает, как сказал Боб Арнсон.

но вы должны обратить внимание на имя и исходный файл полезной нагрузки.

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" />
</BootstrapperApplicationRef>

если вы измените имя на другое. загрузчик не будет локализован.

Похожие вопросы