Runtime language change is a feature where the user can change the user interface language of the application on run time. Application starts on one language. Later on the user can select a new language from the available language list and make application to translate itself using the selected language. This is the most flexible localization method for applications. In general there are three different way to localize an application. They are:
Localized application contains support for one language only and it always starts on that language no mater application or operating system settings. The other two methods contain support for multiple languages. The difference between multilingual and runtime language change enabled application is that a multilingual application starts on the language that either OS or your logic selects it but you can not change it afterwards. In order to run a multilingual application on different language you have to stop it, modify the applications and/or operating system settings and start again.
Let's have an example. We have an English .NET application, Converter.exe, and its resource files (called satellite assembly files in .NET) in Finnish, German and Japanese. This makes the application to support four languages. If you start the application on Finnish Windows, .NET runtime will load the Finnish resources (fi\Converter.resources.dll) and application will initially show up in Finnish.
If you choose Tiedosto | Kieli menu (File | Language) the application call Sisulizer's SelectLanguage functions that shows a language dialog that contains available languages.
This dialog is still in Finnish because the active language is Finnish. However the language names are in native language (Deutsch = German, suomi = Finnish and 日本語 = Japanese) to make it easier to select the right one. If you want to turn English on select English and click OK. Sisulizer's classes load English resources (in that case there is no English resource file so Sisulizer uses the original resources of the application), and enumerate all existing forms and translate theirs components and properties to English using the new resource data. The process is very fast and flicker free. After that the application is in English.
Let's change language again. Choose File | Language and select 日本語 from the list. Sisulizer loads Japanese resource file (ja\Conveter.resources.dll) and translates the application into Japanese.
In order to perform this only minimal changes to original application is needed. Basically you have to add one line of code that call the select language functions and you have to link Sisulizer's library with the application. The files you need to deploy your application are the application itself, Sisulizer library and the satellite assembly files in sub directories.
Each satellite assembly sub directory contains localized satellite assembly files for the application and Sisulizer library (select language dialog).
The above example was for .NET. VCL does not use satellite assembly files but resource DLL files that are stored on the same directory as the application file.
Runtime language change requires a lot from the platform. In order to make it automatic (i.e. without significant code modification) the platform need to support component oriented programming. In practice this means that runtime language change needs an object oriented and component/property/event modeled platform. Currently there are only few platforms that meet those requirements. They are:
It is possible to implement runtime language change for other platforms but not without significant need to modify your existing code.