A .exe or .dll file has a possibility to store same resource item in several different languages. For example a single .exe file can contain the same dialog resource in English, German and French. This feature makes it possible to create a multilingual .exe.
Let's look at typical Windows application. Our example is a Delphi compiled applications. It has several resource types such as strings, forms, icons. The original language of the sample is English but Delphi compiler does not give resources English language id but give neutral id instead. A neutral language id is 0. The sample contains one form (TFORM1) that has neutral language id.
When Sisulizer creates a multilingual .exe it adds each resource in several languages. Our example has three target languages: Finnish, German and Japanese. It also gives the original neutral resource language id matching the original language of the application (e.g. English). When we look at the resources of the multilingual .exe we find out that instead of one TFORM1 we have four TFORM1s. One in each language.
The above application contains TFORM1 resource in German (7), English (9), Finnish (11) and Japanese (17).
The clear advantage of multilingual .exe is that you can deploy the same file everywhere. There is no need to choose between different .exe or resource DLLs. This makes setup and deployment much easier.
The biggest problem of multilingual .exe is that the developer or the end user has no easy way to control what language resource to use. Windows operating system makes the choice. Unfortunately there is no single method how operating system makes this choice. The method depends on the operating system. In Windows 2000 and later the language is always the same as the language of the operating system itself. In Windows NT the language matching the International settings in the Control Panel will be used. 95/98/ME works like 2000 and later.
Because multilingual .exe contains the same resource in many times the size of the .exe can be much higher compared to the single language .exe. However on most cases the size of the resource blocks in the .exe is much smaller than the size of the code blocks. This means that even having a dozen languages in the same .exe won't double the size of the .exe.
When Sisulizer creates multilingual application of library file it can ether keep the original resource files, modify them, or completely remove them. The action depends on the type of the source file and the settings of the source. PE files created by Delphi or C++Builder (later VCL-PE) has neutral language id in their resources. PE files created by Visual Studio or Visual Basic (later MS-PE) has a language id in their resources.
To change the setting if to keep or remove existing resources right click the source name on the project tree and choose Properties. Then either check or uncheck Keep original resources check box.
If you choose to keep the original resources (default), and you are localizing a VCL-PE file, and Sisulizer is about to add a localized resource item it will give a language if for the original neutral resource item. The language id will be the id of the original language of the source that is specified in the Encodings sheet of the above dialog. If the project contains a target language having the same language id than the original language, Sisulizer removes the original resource item even if Keep orignal resources is checked. The reason Sisulizer changes the language id of the original resource id is because if there would exist resource item with neutral language id and same resources with language id, Windows would always us the neutral resources no matter even if there were a resource having a matching language id.
If you choose not to keep the original resources Sisulizer will delete the original resource item if it adds a localized one.