Можно ли передать переменную в файл локализации WIX?

Мне нужно использовать переменную в файле локализации WIX WIXUI_en-us.wxl. Я пытался использовать его так:

<String Id="Message_SomeVersionAlreadyInstalled" Overridable="yes">A another version of product $(var.InstallationVersionForGUI) is already installed</String>

Но это не работает. И когда я объявил свойство и использовал его следующим образом:

<String Id="Message_SomeVersionAlreadyInstalled" Overridable="yes">A another version of product [InstallationVersionForGUI] is already installed</String>

тоже не работает.

Где я ошибся?

Спасибо за помощь и ваше время.


person Elena    schedule 26.07.2011    source источник


Ответы (3)


Строки локализации обрабатываются во время компоновки, поэтому вы не можете использовать переменные препроцессора $(var). Использование ссылки [свойство] поддерживается, если место, где используется строка локализации, поддерживает форматирование во время выполнения (например, с использованием типа поля Formatted).

person Bob Arnson    schedule 26.07.2011
comment
См. также joyofsetup.com/2013/02/06/l10nm10n-localization -minimization для получения информации о повторном использовании строк локализации в других строках локализации. - person Bob Arnson; 13.12.2013
comment
Я использую Wix3.10 и не могу использовать строки локализации в другой строке локализации. - person Hossein Shahdoost; 29.10.2015
comment
WiX 3.11: по-прежнему нельзя использовать строки локализации в другой строке локализации. - person whenrybruce; 01.03.2019

Ваш второй метод должен работать нормально. Это тот же метод, который используется для файлов .wxl по умолчанию.

Например, в вашем файле .wxl вы должны объявить свою строку:

<String Id="Message_Foo">Foo blah blah [Property1]</String>

И в вашем файле .wxs вы объявляете свойство. Если вы хотите, вы можете объявить свойство, чтобы оно соответствовало переменной WiX (что, похоже, вы пытаетесь сделать)

<Property Id="Property1">$(var.Property1)</Property>
person saschabeaumont    schedule 27.07.2011
comment
Странно, теперь этот метод работает. Не знаю что не так, но все равно спасибо! - person Elena; 27.07.2011
comment
У меня не работает, Message_Foo при доступе с помощью !(loc.Message_Foo) по-прежнему возвращает для меня статическую невычисленную строку, буквально "Foo blah blah [Property1]". Где именно вы определяете свойство? В моем случае оно было в основном файле wxs после элемента Package... - person Cel; 26.04.2012
comment
Свойства @Cel чувствительны к регистру, это единственная проблема, о которой я могу думать, если вы не имеете в виду элементы в таблице String. - person saschabeaumont; 09.05.2012
comment
Я нашел несколько разочаровывающий ответ в списке рассылки пользователей Wix: Это означает, что вы пытаетесь использовать свойства в строке, которая не отформатирована. - кажется, что на данный момент невозможно правильно шаблонировать файлы локализации Wix, поскольку многие цели не отформатированы; и вам нужно учитывать цели использования, а не всегда работающие оценки ... - person Cel; 09.05.2012
comment
@cel этот конкретный ответ в списке рассылки немного расплывчатый, если вы знаете свойство во время сборки, вы можете просто комбинировать переменные wix и локализации... например. <Product Id="*" UpgradeCode="$(var.Property_UpgradeCode)" Name="!(loc.ApplicationName) $(var.versionmajor)" Language="!(loc.Property_ProductLanguage)" Version="$(var.version)" Manufacturer="!(loc.ManufacturerName)" > - person saschabeaumont; 16.05.2012
comment
Как вы устанавливаете и используете свойство в проекте начальной загрузки? - person whenrybruce; 01.03.2019

Я пытался получить файл локализации для использования переменных. Наткнулся на эту запись:

В WiX есть разные уровни переменных (переменные препроцессора свечи, WixVariables/переменные локализации/переменные связывателя Light и свойства MSI). Каждый из них имеет разный синтаксис и оценивается в разное время:

Переменные препроцессора Candle "$(var.VariableName)" оцениваются при запуске свечи и могут быть установлены из командной строки свечи и из операторов "". Доступ к свойствам среды во время сборки, а также к пользовательским переменным также можно получить аналогичным образом (изменив префикс «var.» на другие значения).

Переменные Light, доступные из командной строки, — это WixVariables, и доступ к ним осуществляется с помощью синтаксиса «!(wix.VariableName)». Чтобы получить доступ к вашей переменной из командной строки, вам нужно изменить строку на: Эта сборка была подготовлена ​​!(wix.BuildMachine)

Если вместо этого вам нужно, чтобы значение BuildMachine существовало как свойство MSI во время установки (что является синтаксисом «[VariableName]»), вам нужно будет добавить следующее в один из ваших файлов wxs во фрагменте, который уже связан:

Теперь переменная среды COMPUTERNAME всегда содержала имя моей машины сборки в прошлом, и вы можете получить к ней доступ следующим образом: $(env.COMPUTERNAME). Таким образом, вы можете избавиться от добавления командной строки в light.exe и изменить свой файл wxs следующим образом:

‹WixProperty Id="BuildMachine" Value="$(env.COMPUTERNAME)"/>

person Chirayu Shishodiya    schedule 04.01.2013