There are many standard and custom ways that localization can
be handled in Windows applications. In all cases, user interface
elements are gathered in a container so they can be isolated and
translated to other languages while keeping the bulk of the
application's executable code unchanged. Containers for user
interface elements can be a resource file or a satellite DLL.
ResMe supports both of these options and ResMe also facilitates
the use of custom string mechanisms.
encourages the use of resource files for UI strings, pictures and
other localization elements. A single resource file can hold
multiple languages in a single string table or it can hold
multiple string tables. Multiple string tables is the default
scheme that Microsoft seems to encourage but there are some
disadvantages. A short description of resource files and satellite
DLLs is given here with links to more detailed discussions.
file with multiple string tables.
is the easiest approach to take. VB will automatically select the
appropriate string table based on the computer's locale setting.
This is handy but it makes it impossible to change languages at
runtime- it is necessary to change the locale setting and reboot.
The application will also become rather large because ALL
languages are compiled into the application. Another drawback is
that minor translation changes or added languages will require a
complete recompile and re-release of your application.
file with one string
is also an easy approach to take and it solves the problem of
switching languages. A simple indexing scheme is used to select a
block of string IDs contained in a single string table. This has
the same drawbacks of a large EXE file and the need to recompile
whenever there is a translation change to one of the UI strings.
An added issue is the need to group all the translated strings
into predefined numeric blocks.
is a more complicated approach but it is also more flexible. Each
language is given its own string DLL. It is easy to change
languages at runtime by selecting a different satellite DLL. And
since the DLLs are separate from the EXE file, the application
does not grow larger each time a new language is added. In
addition, changes can be made to individual language DLLs or new
languages can be added without the need to recompile your
application. The drawbacks are a slight performance decrease due
to accessing the DLL and the increased coding complexity.