Lingus help
Introduction
This is not a real manual, it's more like a crash course to get started using Lingus. This document contains information about how to translate your application. If any questions are left open, I am available for questions by mail or by using the forum.
Content
Prepare project
At first the delphi-project has to be prepared for Lingus. To do this the following steps are necessary.
- Open the project you want to translate with delphi.
- Make the file LanguageObjects.pas (from LingusDirectory\pas) accessible for your project - either add the file to your project (not good) oder add the file to the search path (good).
- Units that need to access the translations later need
LanguageObjects
in their uses clause. - Properties of objects (at the moment
Caption
andHint
) will be processed by Lingus, strings need to be edited in the code. For example'Hello World'
becomes_('Hello World')
, similar to gettext. The string'-'
is exceptional and will be ignored by Lingus. - You need to add
Language.Translate(Self);
to the Create event or the constructor of your forms, so that translations will be applied to the component of your form. There is also an overloaded version of the procedure available where you can specify procedures that get executed before and after translating using the argumentsPreTranslate
andPostTranslate
. If no language has been assigned to theLanguage
-object as described under Misc, the language to use will be automatically determined. If the current per-user windows language is found in the translations, that one will be used. If not, english will be used. If english is not available, the first found language from the Lingus-translations will be used.
Translate project
After preparing the project Lingus can be used to translate the texts.
- Start Lingus and create a new project using "File" -> "New...".
- Configure the new project and import the prepared delphi project in the next step.
- Text can now be translated - in the left view, a list of found strings from the program is available, in the right view you can edit the translations.
- Save the project after translating the strings - in this tutorial ProjectDirectory\res\language.lpf. is used.
- If "Export resource file on save" has not been disabled in the settings, the file ProjektOrdner\res\language.res was written on save, which now need to be added to the delphi project.
- Open the project file of the delphi project (.dpr) and add
{$R res\language.res}
after the line{$R *.res}
, so the translations will be available to the program at runtime without using external files.
Synchronize translations after changes to the sourcecode
After changing texts of components or strings in your sourcecode, the lingus project should be synchronized with the changed sources.
- Start Lingus and open the .lpf file belonging to the delphi project.
- Select "Project -> Synchronize with sources..." from the Lingus menu.
- Select project folder and import the changed sources.
- Changes can now be managed very easy. If a new string was found or a string from the Lingus project does not exist in the sources anymore, this will be indicated with an icon. The synchronization dialog provides options to add new found strings to the project, to delete not found strings, or to assign a string from the delphi project that has not been found in the lingus project because it changed to an already translated string.
Misc
Change language at runtime
To change the applications language, the in the
initialization
clause createdLanguageList
from LanguageObjects.pas needs to be used to set the propertyCurrentLanguage
of theLanguage
object, as shown in the following example.
The following call ofLanguage.Translate(Self);
is important in all open forms to apply the changes.for i := 0 to LanguageList.Count - 1 do if LanguageList[i].Available then begin if LanguageList[i].ID = 'en' then begin Language.CurrentLanguage := LanguageList[i]; Break; end; end; Language.Translate(Self);
All objects in LanguageList are from the class TLanguage. They have the property
ID
,Name
andAvailable
.ID
is the abbreviation of the language, for example "en" or "de".Name
is the language's name.Available
tells if the language is contained in the currently loaded project.- Load translations from file
To load translations from a .lpf file, you need to use
Language.LoadFromFile('Dir\File.lpf')
. This should happen before callingLanguage.Translate()
, because otherwise switching the active language of your application will not work if the loaded translations differ from the translations that are embedded as resource in your application. - Icons for languages
The file LanguageIcons.pas (from LingusDirectory\pas) contains the class
TLanguageIcons
. If an instance of this class is created, it provides access to the symbols of the different languages. To achieve this the line{$R res\lang_icons.res}
needs to be added to the .dpr file of the delphi project after it was copied from LingusDirectory\res\ to ProjectDirectory\res\. At the moment there are only icons for German, English and French included. The propertyList
of TLanguageIcons is an ImageList that contains the language's icons. The index in this list for a specific language can be retrieved by usingGetIconIndex()
. To get the index to the language German, you need to use IconList.GetIconIndex('de'). Another function is CreateIcon() that returns a TIcon for a specific language. This icon has to be freed by the caller afterwards.