GtkAda Reference Manual - Package Gtkada.Intl

[Contents] [Back] [Prev] [Up] [Next] [Forward]

# Package Gtkada.Intl

This package provides support for string internationalization using the libintl library.

To change the current locale setting, use on the environment variables "LANG" or "LC_MESSAGES". For example, to switch to the french locale using bash:

$ export LANG=fr

Depending on the specific implementation of gettext, the following environment variables may be set to change the default settings of locale parameters:

- LANG Specifies locale name.
- LC_MESSAGES Specifies messaging locale, and if present overrides LANG for messages.
- TEXTDOMAIN Specifies the text domain name, which is identical to the message object filename without .mo suffix.
- TEXTDOMAINDIR Specifies the pathname to the message database, and if present replaces the default (e.g /usr/lib/locale on Solaris, /usr/share/locale on Linux).

See the gettext documentation of your specific OS for more details.

The recommended way to use the gettext capability in your application is to use Dgettext with your own domain, and define the following shortcut:

function "-" (Msg : UTF8_String) return UTF8_String; -- Convenient shortcut to the Gettext function.

function "-" (Msg : UTF8_String) return UTF8_String is begin return Dgettext ("my_domain", Msg); end "-";

Do not forget to call Bind_Text_Domain ("my_domain", "my locale prefix") at the beginning of your program. For example, if the prefix of your application is /usr, the standard location of the locale would be /usr/share/locale, e.g: Bind_Text_Domain ("GtkAda", "/usr/share/locale");

Under this locale directory, the functions provided by this package will look for the directory $LANG/LC_MESSAGES, /usr/share/locale/fr/LC_MESSAGES in our example; and in this directory, the file <domain>.mo will be used, e.g /usr/share/locale/fr/LC_MESSAGES/GtkAda.mo

The .mo files can be generated using the GNU tool msgfmt that takes a text file containing for each string the original and the translation. See msgfmt documentation for more details. Here is a sample translation file that can be used as an input for msgfmt:

# gtkada-fr.po msgid "Help" msgstr "Aide"

msgid "Yes" msgstr "Oui"

$ msgfmt gtkada-fr.po -o gtkada-fr.gmo $ cp gtkada-fr.gmo /usr/share/locale/fr/LC_MESSAGES/GtkAda.mo

Then, to enable the string translation in your application, use the "-" function defined above, e.g:

Gtk_New (Label, -"Help"); Gtk_New (Label, -("Help ?") & ASCII.LF & -("Yes"));

- Gtkada.Intl Subprograms

## Subprograms

    function Gettext
      (Msg                :        Glib.UTF8_String)
       return Glib.UTF8_String;
| Look up Msg in the current default message catalog. Use the current locale as specified by LC_MESSAGES. If not found, return Msg itself (the default text).
    function Dgettext
      (Domain             :        String;
       Msg                :        Glib.UTF8_String)
       return Glib.UTF8_String;
| Look up Msg in the Domain message catalog for the current locale.
    function "-"
      (Msg                :        Glib.UTF8_String)
       return Glib.UTF8_String;
| Shortcut for Dgettext ("GtkAda", Msg)
    function Dcgettext
      (Domain             :        String;
       Msg                :        Glib.UTF8_String;
       Category           :        Integer)
       return Glib.UTF8_String;
| Look up Msg in the Domain message catalog for the Category locale.
    function Default_Text_Domain   return String;
| Return the current default message catalog.
    procedure Text_Domain
      (Domain             :        String := "");
| Set the current default message catalog to Domain. If Domain is "", reset to the default of "messages".
    procedure Bind_Text_Domain
      (Domain             :        String;
       Dirname            :        String);
| Specify that the Domain message catalog will be found in Dirname. This overrides the default system locale data base.

[Contents] [Back] [Prev] [Up] [Next] [Forward]