| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
11.5 Being a gettext grok
NOTE: This documentation section is outdated and needs to be revised.
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
gettextfunction. The method which is presented here only works correctly with the GNU implementation of thegettextfunctions.In the function
dcgettextat 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: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,
LANGUAGEchanges? According to the process explained above the new value of this variable is found as soon as thedcgettextfunction 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
dcgettextfunction as long as no new catalog is loaded. But ifdcgettextis not called the program also cannot find theLANGUAGEvariable be changed (see section Optimization of the *gettext functions). 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_cntris defined in ‘loadmsgcat.c’. You don’t need to know what this is for. But it can be used to detect whether agettextimplementation is GNU gettext and not non-GNU system’s native gettext implementation.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on June 7, 2014 using texi2html 5.0.
