Assuming that you don't plan to use a bootstrapper that chooses the language and then starts the MSI with the appropriate language transform, you can use the method described on the following site: http://www.installsite.org/pages/en/msi/articles/embeddedlang/
Please note that the method is unsupported by Microsoft, but I had no negative experience with it. Also note that not the UI language of Windows is used to detect the language, but the Standards and format options of Windows.
It basically consists of the following steps:
- Create your base MSI file with the base / fallback language, most of the times it will be English.
- Create your language transform files, one for each language. If the UI will not change and you change only UI items, you can reuse these transform files for further builds.
- Add the language transforms as streams, using a VBScript-script from the Windows SDK.
- Update the language entry of the summary information stream to reflect the included languages.
During installation, the initial dialog will pop-up which checks for the configured language, then the UI is shown in the correct language.
As said: this method worked great for me for an installer and > 20 languages.