Carsten Haitzler (The Rasterman) <[EMAIL PROTECTED]> writes: > there's no documented call though to tell gettext to "flush your > mush" :(
I found this in the Gettext info pages, so for GNU Gettext there is a
way to make it change language at runtime:
10.5 Being a `gettext' grok
===========================
To fully exploit the functionality of the GNU `gettext' library it is
surely helpful to read the source code. But for those who don't want
to spend that much time in reading the (sometimes complicated) code
here is a list comments:
* Changing the language at runtime
For interactive programs it might be useful to offer a selection
of the used language at runtime. To understand how to do this
one need to know how the used language is determined while
executing the `gettext' function. The method which is presented
here only works correctly with the GNU implementation of the
`gettext' functions.
In the function `dcgettext' at every call the current setting of
the highest priority environment variable is determined and used.
Highest priority means here the following list with decreasing
priority:
1. `LANGUAGE'
2. `LC_ALL'
3. `LC_xxx', according to selected locale
4. `LANG'
Afterwards the path is constructed using the found value and the
translation file is loaded if available.
What happens now when the value for, say, `LANGUAGE' changes?
According to the process explained above the new value of this
variable is found as soon as the `dcgettext' function is called.
But this also means the (perhaps) different message catalog file
is loaded. In other words: the used language is changed.
But there is one little hook. The code for gcc-2.7.0 and up
provides some optimization. This optimization normally prevents
the calling of the `dcgettext' function as long as no new catalog
is loaded. But if `dcgettext' is not called the program also
cannot find the `LANGUAGE' variable be changed (*note Optimized
gettext::). A solution for this is very easy. Include the
following code in the language switching function.
/* Change language. */
setenv ("LANGUAGE", "fr", 1);
/* Make change known. */
{
extern int _nl_msg_cat_cntr;
++_nl_msg_cat_cntr;
}
The variable `_nl_msg_cat_cntr' is defined in `loadmsgcat.c'.
You don't need to know what this is for. But it can be used to
detect whether a `gettext' implementation is GNU gettext and not
non-GNU system's native gettext implementation.
--
Martin Geisler GnuPG Key: 0x7E45DD38
PHP Exif Library | PHP Weather | PHP Shell
http://pel.sf.net/ | http://phpweather.net/ | http://mgeisler.net/
Read/write Exif data | Show current weather | A shell in a browser
pgpCqa3Gf9kxS.pgp
Description: PGP signature
