In general, for each application resource that is selected as translatable, VisualStudio will create one .resx file. However the developer also needs to specify the languages this resource will be translated into! And for each language a new .resx file is also created by VisualStudio .NET.

So for example, suppose a developer selects a WinForm  for localization into French and German, VisualStudio will create three .resx files.

Base Language

French Language

German Language

Form1.resx

Form1.fr.resx

Form1.de.resx

Each language version of the original Form1.resx file is highly optimised by Visual Studio.NET and only contains the differences or deltas between the base and language file. Consequently, the compiled Language Assemblies are also highly optimised.

note.bmp

The Alchemy .NET Component can be configured to create optimised and unoptimised .resx and language assemblies.

Compilation Process for .resx files

Each .resx file is compiled into a .resource file, which in turn is linked into a .resource.dll satellite file, referred to as a satellite DLL or Language Assembly.

image16.jpg

This satellite DLL contain only the resources for a single language version of a .NET application and is stored in predetermined folders by the Visual Studio compiler. These folders have language dependent names (eg fr-FR, de-DE) which are used by the .NET framework to locate localised User Interface translations.

image17.jpg

When a .NET application is launched on a client workstation, it will determine the language of the client Operating System and load the relevant language assembly. This allows multiple workstations, all running different language versions of Windows, to launch .NET applications in the same language as the workstation Operating System.

You can see now why the folder structure and naming convention of the .resx files are so important to the development process and correspondingly to the localization process! During localization, these folders structures and naming conventions for .resx and language assemblies need to be strictly adhered to so that the framework can correctly identify which language to displayed.