Localizing an MSI package—primarily the user interface but also bits like the product name, shortcut names, and other user-visible, localizable strings—has been pretty much unchanged since WiX v2.0:
- Localizable strings are specified in the appropriate attributes in your WiX authoring using !(loc.stringid) syntax.
- Strings are specified by id in per-language WixLocalization (.wxl) files.
- Light, the WiX linker, takes a list of cultures to use when resolving !(loc.stringid) in the authoring.
As you can see, localization is all about the strings. However, strings can vary dramatically in length among languages. In the WixUI dialog library, controls were sized to handle string lengths for all the languages WixUI supported. Unfortunately, that resulted in some controls being far wider than necessary. The Install button, for example, is wider than the other buttons on the same dialogs. We hadn’t had to resize any controls in WixUI for a while—and then a bug said otherwise.
Rather than yet again resizing a control, WiX v3.6 gets a new feature so we never have to do that again. In WiX v3.6, the WixLocalization schema has been extended with a UI child element that lets the localization for a particular culture change the attributes of an individual control or an entire dialog. For example, a later bug indicated the need for another big button in WixUI_Advanced. The fix in the ru-RU localization file was easy:
<UI Dialog="AdvancedWelcomeEulaDlg" Control="Print" X="50" /> <UI Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" X="124" Width="85" />
The first line moves the Print button to the left, to make room for a bigger Advanced button, which the second button supplies. The dialog and control attributes identify a particular control.
The WixLocalization UI element (unrelated to the UI element in the WiX namespace) lets you:
- Resize a control using the Height and Width attributes.
- Move a control using the X and Y attributes.
- Change the control’s localization-related attributes: LeftScroll, RightAligned, and RightToLeft.
- Change the control’s text using the inner text of the UI element.
You can also use the UI element on dialogs by omitting a Control attribute:
- Resize a dialog using the Height and Width attributes.
- Change the dialog’s centering values using the X and Y attributes.
- Change the dialog’s title using the inner text of the UI element.
Don’t forget native code
Though localization files are most often used inside MSI packages using WixUI dialog sets, they’re also used extensively in the WixStandardBootstrapperApplication for Burn. And even if you use a managed bootstrapper application, you’re still using WixStandardBootstrapperApplication when the managed host needs to install .NET.