You need to build a single .msi for each language you want to implement inside your installer, plus a neutral one (I choose the culture en-us as the neutral one).
Then you generate a .mst file (MSI transformation) for each non-neutral culture, by using the MsiTran.exe application with the syntax: "MsiTran.exe -g NeutralInstaller.msi CultureSpecificInstaller.msi TransformFile.mst".
This application compares two .msi files and creates a delta, placing it inside the .mst file. So in each .mst file you've got the differences between your main .msi (neutral) and the culture-based one.
After that you need to add informations inside the neutral.msi file, modifying it by using the MsiDb.exe application with the syntax: "MsiDb.exe -d NeutralInstaller.msi -r TransformFile.mst".
If you run NeutralInstaller.msi with no arguments, you notice no differences. If you run NeutralInstaller.msi, with the parameter "TRANSFORMS=TransformFile.mst", the installer starts with transformations specified inside the TransformFile.mst
Then you create a bootstrapper with the NeutralInstaller.msi, and every .mst file embedded. When you select a language, you pass "TRANSFORMS=#LANGID.mst" as a cmdparamenter of the .msi, and the installation starts with the language you selected.
Notice: in order for this DNI to work properly, you must add a simple hack: add to the project a number of "Setup configuration" equal to the number of languages you need to implement. Each SC has a language string and a language id associated (i.e.
English 1033, Italian 1040, ecc ecc). For everyone but the first SC you need to add the lcid_filter with a number you are sure you will never use as language id, so you have the dropdownlist menu with languages and you're sure that only the first SC will be
executed, even if the #LANGID property is correctly set.
It's vital that .mst filenames correspond to language IDs, in order for #LANGID property to work properly.
It's the first time I use this stuff, I might have been inaccurate and lucky, so take it with due softness please.
P.S. Both MsiTran.exe and MsiDb.exe are shipped with Microsoft SDK, you can download it form the MS' website.