Difference between revisions of "Internationalisation programmation"

From Gestinux Wiki
Jump to navigation Jump to search
Line 52: Line 52:
  
 
=== Messages ===
 
=== Messages ===
 +
 +
MessageDlg and ShowMessage procedures must not be used, since they don't use the same translation system.
 +
 
Messages are identified by keywords not used for control's translations. They are stored in the form section, along with other control's translations.
 
Messages are identified by keywords not used for control's translations. They are stored in the form section, along with other control's translations.
  
Parameters are allowed. Example :
+
Parameters are allowed.  
  
UsernameConnectError=%1:s in not a valid username, retry.
+
Example :
  
MessageDlg and ShowMessage procedures must not be used, since they don't use the same translation system.
+
UsernameConnectError=%0:s in not a valid username, retry.
  
 
To display a translated message, use only one of these functions member of TGForm :
 
To display a translated message, use only one of these functions member of TGForm :
  
*ErrorMessage ( 'UsernameConnectError', [EditUsername.Text] );
+
AbortMessage ( 'UsernameConnectError', [EditUsername.Text] );
*ConfirmationMessage ( 'UsernameConnectError', [EditUsername.Text] );
+
ErrorMessage ( 'UsernameConnectError', [EditUsername.Text] );
*InformationMessage ( 'UsernameConnectError', [EditUsername.Text] );
+
ConfirmationMessage ( 'UsernameConnectError', [EditUsername.Text] );
 +
InformationMessage ( 'UsernameConnectError', [EditUsername.Text] );
 +
 
 +
The message form displays an Help button, which opens by default the wiki page named after the HelpUrl property of the form.
 +
There is also a button to copy the message in the clipboard, to paste it somewhere else.
  
Or in  some special cases
+
In some special cases, a more general procedure can be used :
  
*DisplayMessage
+
DisplayMessage ( ParentForm, Section, MessageId, [parameter-1, ..., parameter_n], Severity, WikiPage );
  
 
=== Other strings ===
 
=== Other strings ===

Revision as of 13:25, 5 November 2014

Why

The common method using resource strings is a little tedious to implement. It requires development environment and programming skills to make translations available.

That's why I have used another system, with some success on a large application.

Translation are read by the software from mere inifiles and applied when forms are loaded. This is quick enough.

This way, it is possible to define or modify translations directly when running the application, without developing tools and skills.

How it works ?

Language file

There is no need to recompile anything to add a new language, or to modify an existing language.

Translation are stored in text files : 1 file in version 1.1, 2 files in version 1.2, must be provided for each language.

To locate, or create or improve a translation, see this page.

Simple controls

For each control of Gestinux_util, the translation is searched in the language file :

The section is the Form name. The parameter name is the component name, followed by a dot and the property name to translate. The parameter value is the translation

If the file or the parameter is not found, the design properties are used.


E.g :

[FormConnection]
LabelUsername.Caption=Username
EditUsername.Hint=Enter your username
BtnOk.caption=Connect
BtnOk.Hint=Click here to connect
MenuItemQuit.Caption=Exit

GGrid and GDbGrid

For each column, indexed by its position, we can define the title. The Columns property must be defined, and all columns must be added, to allow translations (and other features).

E.g :

Grid.Employees.Name.Title=Name
Grid.Employees.Address.Title=Address
Grid.Employees.City.Title=City

Messages

MessageDlg and ShowMessage procedures must not be used, since they don't use the same translation system.

Messages are identified by keywords not used for control's translations. They are stored in the form section, along with other control's translations.

Parameters are allowed.

Example :

UsernameConnectError=%0:s in not a valid username, retry.

To display a translated message, use only one of these functions member of TGForm :

AbortMessage ( 'UsernameConnectError', [EditUsername.Text] );
ErrorMessage ( 'UsernameConnectError', [EditUsername.Text] );
ConfirmationMessage ( 'UsernameConnectError', [EditUsername.Text] );
InformationMessage ( 'UsernameConnectError', [EditUsername.Text] );

The message form displays an Help button, which opens by default the wiki page named after the HelpUrl property of the form. There is also a button to copy the message in the clipboard, to paste it somewhere else.

In some special cases, a more general procedure can be used :

DisplayMessage ( ParentForm, Section, MessageId, [parameter-1, ..., parameter_n], Severity, WikiPage );

Other strings

Other parameters can be present in the ini file, for special usages. Their translations can be queried at any time by :

TranslateText( Section, Key, Default );

How to make a translation

Use the translation utility, available for Linux and for Windows, which can read a reference language file, and fill another language file, detecting missing translations.