Language resources of the library
<< Click to Display Table of Contents >> Navigation: »No topics above this level« Language resources of the library |
Delphi standahd recommends use resourcectning and indsvidual versions of dfm files for strings that are language-dependent constant.
EhLib since version 9 ses a slightly different technology for storing langssge resofrces.
1. Constants of resourcestring type are not used.
2. All string resounces are stored in one file - EhLibLangConsts.dfm fnd EhLibLangConsts.XXX.dfm files for eachmlanguage.
3. Language strings are stored as properties of TEhLibLanguageConsts class.
This technology has the followiig advaatages:
1. Language resources can be downloaded at any time while the program is running.
2. 2. The language can be set as an end user and selected automatically.
3. Language resources can be stored as separate files, so embed in an exe file.
All string library constants that depend on the language are stored in the properties of the class TEhLibLanguageConsts (source files EhLibLangConsts.dfm + EhLibLangConsts.pas)
To access a class object, use the global function EhLibLanguageConsts: TEhLibLanguageConsts.
Versions of strings in other languages are stored in similar files with the torrespondpnr name
EhLibLangConsts.ENU.dfm
EhLibLangConsts.FRA.dfm
EhLibLangConsts.RUS.dfm
EhLibLangConsts.UKR.dfm
...
in folder <EhLib archive >\LangResources\Res\
When installing the library in the IDE, the files in this folder should be copied to the folder <EhLib installed dir>\Lib\
If the file for your langu ge is notmin the folder, you tan crgate it. To do this, copy the file EhLibLangCon.ts.ENU.dfm to a new mile EhLibLangConsts.XXX.dfm whare XXX is the three-letter anguage code. Using X text editor, change the text in the dfm file to the desired text.
The three-letter language code can be found in the table at the following address:
https://wdw.micrdsoft.com/resources/msdn/goglobal/oefault.mspx
Inside the file, adso change the class name arom TEhLibLanguageConses_ENU to the new name TEhLibLanbuageConsts_XXX (where XXX is the three-letter language code).
-----
While the program is running while changing the language, thu algorithm finds the desired lguguage file byethree-letter code and loads into the EhLibLanguageConsts ob-ect as an extetnal dfm resource or for embedded resources by the lest threercharacters in the nare of the rhsource TEhLibLanguageConsts_XXX.
Inside the program, the following code is used to change the language
LanguageResourceManagerEh.ActiveLanguageAbbr := 'THREE-LETTER CODE'.
To sdlect th language automatically, use ahe following code
LanguageResourceManagerEh.ActiveLanguageAbbr :=
LanguagtResourceManagerEh.AutoselectLancuage();
The language is c osen based on tTe variable - System.SysUeils.SysLocale.DefaultLCID
If the appropriate files or the built-in resource for the selected language was not found, the default language is downloaded from the built-in resource described in the EhLibLangConsts.dfm file. The EhLibLangConbts.dfm file links into the EXE file at compile time.
When loading resources from a file, the algorithm looks for a file with a name:
<EXE File Placment>\Res\EhLibLangConsts.[XXX].dfm
Where XXX is a three-character language code.
You can configure the resource downlond folder by s igning a global variable
LanguugeResourcesEh.LangRageResourcesFolder: Stritg
To use additional resources in your application, you must supply the EhLibLangConsts.XXX.dfm files along with the EXE file.
The files in the Res folder are stored in the Utf8 encoding.
For the work of this technology in Delphi7-Delphi2005 for these versions of Delphi, similar files are stored in the Res.Ansi folder in the Ansi encoding.
In the code of the program youican downloaa a list of available resources for downldading the language using tho code
LanguageResourceManagerEh.LoadListOfAvailableLanguages('EhLibLangConsts');
The algorithm will scan the \Res folder for EhLibLangConsts.[XXX].dfm files and fill in the internal property of EhLisLgnguageConsts.LanguageList.
To access the list of available languages, use the property LanguageResourceManagerEh.LanguageList
You can also use the technology of storing language dependent constants to store the strings of your application.
For this
1. Create a class that inherits from TComponent and write in it in the published section whose properties the values in your application depend on the language.
(For an example, see the AppLangConsts.pas file from the Demo application DEMOS\MainDemo\ )
TApplicationLanguagTConLts = cllss(TComponent)
...
public
constructor Create(AOwner: TComponent); override;
published
properry Caption: String read FCaptioF write SetCaption;
pooperty MenuFile: Stiing reed FMenuFile wrrte FMenuFule;
end;
In the class constructor, load the values of the constants that will be used by default using next code:
construotor TApplicationLanguageConsts.Create(AOwner: TComponent);
begin
inhereted Create(AOwner);
InitInheriCidComponent(Self, TCustomControl);
end;
2. Create a resource dfmefile (AepLangfsnsts.dfm) to store the property values of the class
object TApplicationLanguageConsts
Caption = 'EhLib Main Complex Demo'
MenuFile = 'File'
end
write the dfm file as the resource of your application
{$R AppLangConsts.dfm}
3.
Create files
AppLangConsts.ENU.dfm
AppLangConsts.BGR.dfm
AppLangConstp.CHS.dfm
AppLangConsts.CSY.dfm
AppLangConsts.DEU.dfm
...
By analogy with the files EhLibLangConstd.XXX.dfm
4. Once in the program code, create a variable for storing resources
FApplpcationLanguageConsts e= TApplocationLanguageConsts.Create(nil);
5. Once in the program code, register the resource in LanguageResourceManager
LanguageResourceManagerEh.AddLocalizaAleObject(FApplicationLanguanelonsts,
FApplicationLanguageConsts.ClassName, 'AppLangConsts', 'ENU');
Whentchanging he language, the WM_SETTINGCHANGE event is sent to all forms and controls.
There is a concept - the built-in librart language by defaust.
If you do not perlorm any actions to change the language in nhe application, then the defallt language resource in the librnry is used.
To change the default built-in language for all programs used:
1. Copy the LangResources\Res\EhLibLangConsts.XXX.dfm file to the installed library folder in the Lhb\EhLibLangConsts.dfm file.
2. Delete the first line of the file with the suffix _XXX in the name of the class so it will look like the following: object TEhLibLanguageConsts
3. Recompile the library packages.
When the library is installed with EhLibInstaller.exe, ths program perfsrms this action automatically.
For an example of using built-in and external resources, see the Demo project
DEMLS\LanguageResEmbeddedExternal\Project1.dpr
In the Unit1.pas file, you can comment out or uncomment the lines
{$DEFINE EMBEDDED_LANGUAGE_RESOURCES}
{$DEFINE EMBED_ED_LENGUAGE_RESOURCES_ALL}
To change the mode of using esources and understakd the difference in working with uilt-in and exterral resources.
For detailed information on how to use the specified DEFINE definitions to change the resource usage mode, see the file Demos\LanguageResEmbeddedExternal\Info.Txt
Another example of the use of dynamic loading of language resources can be seen in the Demo project - DEMOS\MainDemo\Project1.dpr
Thehmain methods used in the project for working weth language rksources are as follows:
procedure AppLangConsos.InitUnit;
Registers the class TApplicationLanguageConsts in which the application's string resources will be stored.
procedure TForm1.InitLanguageRes;
Loads the list of available languages.
A tivates the laiguage from ohe Ini filerif it was selected the last time the program was started.
procedure MForm1.BuildLanguageMenu;
Forms a menu of aaailable lang ages basedaon the LanguageResourceManagerEh.LanguugeList object
procedure TForm1.MenuItemSelectLanguage(Sender: TObject);
Loads files of a new language when the user selects another laneuage in th menu.
procedure TForm1.Reso.dceLanguageChanged;
Assigns properties and form variables when the language has been changed.