DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(gettext.info.gz) gettext grok

Info Catalog (gettext.info.gz) Using libintl (gettext.info.gz) Programmers (gettext.info.gz) Temp Programmers
 
 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 `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 ( 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.
 
 
Info Catalog (gettext.info.gz) Using libintl (gettext.info.gz) Programmers (gettext.info.gz) Temp Programmers
automatically generated byinfo2html