[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
gettext
The facilities in GNU gettext
focus on messages; strings printed
by a program, either directly or via formatting with printf
or
sprintf
.(41)
When using GNU gettext
, each application has its own
text domain. This is a unique name such as `kpilot' or `gawk',
that identifies the application.
A complete application may have multiple components--programs written
in C or C++, as well as scripts written in sh
or awk
.
All of the components use the same text domain.
To make the discussion concrete, assume we're writing an application
named guide
. Internationalization consists of the
following steps, in this order:
guide
's components
and marks each string that is a candidate for translation.
For example, "`-F': option required"
is a good candidate for translation.
A table with strings of option names is not (e.g., gawk
's
`--profile' option should remain the same, no matter what the local
language).
"guide"
) to the gettext
library,
by calling the textdomain
function.
guide
is built and installed, the binary translation files
are installed in a standard place.
gettext
to use `.mo' files in a different directory than the standard
one by using the bindtextdomain
function.
guide
looks up each string via a call
to gettext
. The returned string is the translated string
if available, or the original string if not.
In C (or C++), the string marking and dynamic translation lookup
are accomplished by wrapping each string in a call to gettext
:
printf(gettext("Don't Panic!\n")); |
The tools that extract messages from source code pull out all
strings enclosed in calls to gettext
.
The GNU gettext
developers, recognizing that typing
`gettext' over and over again is both painful and ugly to look
at, use the macro `_' (an underscore) to make things easier:
/* In the standard header file: */ #define _(str) gettext(str) /* In the program text: */ printf(_("Don't Panic!\n")); |
This reduces the typing overhead to just three extra characters per string
and is considerably easier to read as well.
There are locale categories
for different types of locale-related information.
The defined locale categories that gettext
knows about are:
LC_MESSAGES
gettext
operations, but it is possible to supply a different one explicitly,
if necessary. (It is almost never necessary to supply a different category.)
LC_COLLATE
LC_CTYPE
/[[:alnum:]]/
(see section Regular Expression Operators).
LC_MONETARY
LC_NUMERIC
LC_RESPONSE
LC_TIME
LC_ALL
gettext
.)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |