(gettext.info)Triggering


Next: Preparing Strings Prev: Importing Up: Sources
Enter node , (file) or (file)node

4.2 Triggering ‘gettext’ Operations
===================================

   The initialization of locale data should be done with more or less
the same code in every program, as demonstrated below:

     int
     main (int argc, char *argv[])
     {
       …
       setlocale (LC_ALL, "");
       bindtextdomain (PACKAGE, LOCALEDIR);
       textdomain (PACKAGE);
       …
     }

   PACKAGE and LOCALEDIR should be provided either by ‘config.h’ or by
the Makefile.  For now consult the ‘gettext’ or ‘hello’ sources for more
information.

   The use of ‘LC_ALL’ might not be appropriate for you.  ‘LC_ALL’
includes all locale categories and especially ‘LC_CTYPE’.  This latter
category is responsible for determining character classes with the
‘isalnum’ etc.  functions from ‘ctype.h’ which could especially for
programs, which process some kind of input language, be wrong.  For
example this would mean that a source code using the ç (c-cedilla
character) is runnable in France but not in the U.S.

   Some systems also have problems with parsing numbers using the
‘scanf’ functions if an other but the ‘LC_ALL’ locale category is used.
The standards say that additional formats but the one known in the ‘"C"’
locale might be recognized.  But some systems seem to reject numbers in
the ‘"C"’ locale format.  In some situation, it might also be a problem
with the notation itself which makes it impossible to recognize whether
the number is in the ‘"C"’ locale or the local format.  This can happen
if thousands separator characters are used.  Some locales define this
character according to the national conventions to ‘'.'’ which is the
same character used in the ‘"C"’ locale to denote the decimal point.

   So it is sometimes necessary to replace the ‘LC_ALL’ line in the code
above by a sequence of ‘setlocale’ lines

     {
       …
       setlocale (LC_CTYPE, "");
       setlocale (LC_MESSAGES, "");
       …
     }

On all POSIX conformant systems the locale categories ‘LC_CTYPE’,
‘LC_MESSAGES’, ‘LC_COLLATE’, ‘LC_MONETARY’, ‘LC_NUMERIC’, and ‘LC_TIME’
are available.  On some systems which are only ISO C compliant,
‘LC_MESSAGES’ is missing, but a substitute for it is defined in GNU
gettext’s ‘<libintl.h>’ and in GNU gnulib’s ‘<locale.h>’.

   Note that changing the ‘LC_CTYPE’ also affects the functions declared
in the ‘<ctype.h>’ standard header and some functions declared in the
‘<string.h>’ and ‘<stdlib.h>’ standard headers.  If this is not
desirable in your application (for example in a compiler’s parser), you
can use a set of substitute functions which hardwire the C locale, such
as found in the modules ‘c-ctype’, ‘c-strcase’, ‘c-strcasestr’,
‘c-strtod’, ‘c-strtold’ in the GNU gnulib source distribution.

   It is also possible to switch the locale forth and back between the
environment dependent locale and the C locale, but this approach is
normally avoided because a ‘setlocale’ call is expensive, because it is
tedious to determine the places where a locale switch is needed in a
large program’s source, and because switching a locale is not
multithread-safe.


automatically generated by info2www version 1.2.2.9