Copyright (C) 2000-2012 |
GNU Info (gettext.info)TriggeringTriggering `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 (argc, argv) 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' 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 later 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, (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 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 accordfing 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_COLLATE', `LC_MONETARY', `LC_NUMERIC', and `LC_TIME' are available. On some modern systems there is also a locale `LC_MESSAGES' which is called on some old, XPG2 compliant systems `LC_RESPONSES'. Note that changing the `LC_CTYPE' also affects the functions declared in the `<ctype.h>' standard header. 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 `<c-ctype.h>' and `<c-ctype.c>' files in the gettext 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 |