By default, Windows Installer packages are single-language only — no direct support for multi-language packages is currently provided. Creating a multi-lanuage installation package is thus a little more compex — the following provides a summary of the steps required:
- Create an english package
- Compile
candle -dLANG=1033 foo.wxs - Link
light -out foo.msi -loc strings-en.wxl foo.wixobj
- Compile
- Create the german (or whatever language) package
- Compile
candle -dLANG=1031 foo.wxs - Link
light -out foo-de.msi -loc strings-de.wxl foo.wixobj - Create a transform describing the differences between german and englich package:
msitran -g foo.msi foo-de.msi de.mst - Embed the transform in the english package:
msidb -d foo.msi -r de.mst
- Compile
The boostrapper has to decide which language the installer package should use. To use english, call msiexec without any special parameters. To use german, pass the parameter TRANSFORMS=:de.mst to msiexec, which directs it to apply the embedded transform named de.mst before running the package.
To avoid creating a bootstrapper, you might want to try this. See also: WiX tutorial, Lesson 8.


LinkedIn Profile
Xing Profile
Follow me on Twitter (new)
Thanks for your summarize.
You can even have it easier at compile time, if you work with language id property LANG as a localized property.
You put
1031
in your german wxl and
1033
in your english wxl.
You also set the @WixLocalization/Culture property to de-DE resp. en-US.
Then the steps easy up to
1. candle foo.wxs
2. light -out foo.msi -loc strings-en.wxl foo.wixobj
3. light -out foo-de.msi -loc strings-de.wxl foo.wixobj
4. msitran -g foo.msi foo-de.msi de.mst
5. msidb -d foo.msi -r de.mst
Since the light steps take long, also think about
2. lit -bf -out foo.wixlib -loc strings-en.wxl -loc strings-de.wxl foo.wixobj
3. light -cultures:”en-US” -out foo-de.msi foo.wixlib
4. light -cultures:”de-DE” -out foo.msi foo.wixlib
5. msitran -g foo.msi foo-de.msi de.mst
6. msidb -d foo.msi -r de.mst
Thanks for sharing this, Joachim. This should definitely speed up the build process.
Many thanks for this article. It was very helpful for me, but I can’t do the last step: “The boostrapper has to decide which language the installer package should use.” Can you write a simple example of msbuild project that ilustrates how to do it?
best regards, Jan