1/* Message catalogs for internationalization. 2 Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 2, or (at your option) 7 any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 17 USA. */ 18 19#ifndef _LIBINTL_H 20#define _LIBINTL_H 1 21 22@INCLUDE_LOCALE_H@ 23 24/* We define an additional symbol to signal that we use the GNU 25 implementation of gettext. */ 26#define __USE_GNU_GETTEXT 1 27 28#ifndef PARAMS 29# if __STDC__ || defined __cplusplus 30# define PARAMS(args) args 31# else 32# define PARAMS(args) () 33# endif 34#endif 35 36#ifdef __cplusplus 37extern "C" { 38#endif 39 40/* Look up MSGID in the current default message catalog for the current 41 LC_MESSAGES locale. If not found, returns MSGID itself (the default 42 text). */ 43extern char *gettext PARAMS ((const char *__msgid)); 44 45/* Look up MSGID in the DOMAINNAME message catalog for the current 46 LC_MESSAGES locale. */ 47extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); 48 49/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY 50 locale. */ 51extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, 52 int __category)); 53 54 55/* Set the current default message catalog to DOMAINNAME. 56 If DOMAINNAME is null, return the current default. 57 If DOMAINNAME is "", reset to the default of "messages". */ 58extern char *textdomain PARAMS ((const char *__domainname)); 59 60/* Specify that the DOMAINNAME message catalog will be found 61 in DIRNAME rather than in the system locale data base. */ 62extern char *bindtextdomain PARAMS ((const char *__domainname, 63 const char *__dirname)); 64 65 66/* Optimized version of the functions above. */ 67#if defined __OPTIMIZED 68/* These must be a macro. Inlined functions are useless because the 69 `__builtin_constant_p' predicate in dcgettext would always return 70 false. */ 71 72# define gettext(msgid) dgettext ((char *) 0, msgid) 73 74# define dgettext(domainname, msgid) \ 75 dcgettext (domainname, msgid, LC_MESSAGES) 76 77# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) 78/* This global variable is defined in loadmsgcat.c. We need a sign, 79 whether a new catalog was loaded, which can be associated with all 80 translations. */ 81extern int _nl_msg_cat_cntr; 82 83# define dcgettext(domainname, msgid, category) \ 84 (__extension__ \ 85 ({ \ 86 char *__result; \ 87 if (__builtin_constant_p (msgid)) \ 88 { \ 89 static char *__translation__; \ 90 static int __catalog_counter__; \ 91 if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ 92 { \ 93 __translation__ = \ 94 (dcgettext) ((domainname), (msgid), (category)); \ 95 __catalog_counter__ = _nl_msg_cat_cntr; \ 96 } \ 97 __result = __translation__; \ 98 } \ 99 else \ 100 __result = (dcgettext) ((domainname), (msgid), (category)); \ 101 __result; \ 102 })) 103# endif 104#endif /* Optimizing. */ 105 106 107#ifdef __cplusplus 108} 109#endif 110 111#endif /* libintl.h */ 112