1 /* Message catalogs for internationalization. 2 Copyright (C) 1995, 1996, 1997, 1998 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 Foundation, 16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 17 18 /* Because on some systems (e.g. Solaris) we sometimes have to include 19 the systems libintl.h as well as this file we have more complex 20 include protection above. But the systems header might perhaps also 21 define _LIBINTL_H and therefore we have to protect the definition here. */ 22 23 #if !defined _LIBINTL_H || !defined _LIBGETTEXT_H 24 #ifndef _LIBINTL_H 25 # define _LIBINTL_H 1 26 #endif 27 #define _LIBGETTEXT_H 1 28 29 /* We define an additional symbol to signal that we use the GNU 30 implementation of gettext. */ 31 #define __USE_GNU_GETTEXT 1 32 33 #include <sys/types.h> 34 35 #if HAVE_LOCALE_H 36 # include <locale.h> 37 #endif 38 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 /* @@ end of prolog @@ */ 45 46 #ifndef PARAMS 47 # if __STDC__ || defined __cplusplus 48 # define PARAMS(args) args 49 # else 50 # define PARAMS(args) () 51 # endif 52 #endif 53 54 #ifndef NULL 55 # if !defined __cplusplus || defined __GNUC__ 56 # define NULL ((void *) 0) 57 # else 58 # define NULL (0) 59 # endif 60 #endif 61 62 #if !HAVE_LC_MESSAGES 63 /* This value determines the behaviour of the gettext() and dgettext() 64 function. But some system does not have this defined. Define it 65 to a default value. */ 66 # define LC_MESSAGES (-1) 67 #endif 68 69 70 /* Declarations for gettext-using-catgets interface. Derived from 71 Jim Meyering's libintl.h. */ 72 struct _msg_ent 73 { 74 const char *_msg; 75 int _msg_number; 76 }; 77 78 79 #if HAVE_CATGETS 80 /* These two variables are defined in the automatically by po-to-tbl.sed 81 generated file `cat-id-tbl.c'. */ 82 extern const struct _msg_ent _msg_tbl[]; 83 extern int _msg_tbl_length; 84 #endif 85 86 87 /* For automatic extraction of messages sometimes no real 88 translation is needed. Instead the string itself is the result. */ 89 #define gettext_noop(Str) (Str) 90 91 /* Look up MSGID in the current default message catalog for the current 92 LC_MESSAGES locale. If not found, returns MSGID itself (the default 93 text). */ 94 extern char *gettext PARAMS ((const char *__msgid)); 95 extern char *gettext__ PARAMS ((const char *__msgid)); 96 97 /* Look up MSGID in the DOMAINNAME message catalog for the current 98 LC_MESSAGES locale. */ 99 extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); 100 extern char *dgettext__ PARAMS ((const char *__domainname, 101 const char *__msgid)); 102 103 /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY 104 locale. */ 105 extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, 106 int __category)); 107 extern char *dcgettext__ PARAMS ((const char *__domainname, 108 const char *__msgid, int __category)); 109 110 111 /* Set the current default message catalog to DOMAINNAME. 112 If DOMAINNAME is null, return the current default. 113 If DOMAINNAME is "", reset to the default of "messages". */ 114 extern char *textdomain PARAMS ((const char *__domainname)); 115 extern char *textdomain__ PARAMS ((const char *__domainname)); 116 117 /* Specify that the DOMAINNAME message catalog will be found 118 in DIRNAME rather than in the system locale data base. */ 119 extern char *bindtextdomain PARAMS ((const char *__domainname, 120 const char *__dirname)); 121 extern char *bindtextdomain__ PARAMS ((const char *__domainname, 122 const char *__dirname)); 123 124 #if ENABLE_NLS 125 126 /* Solaris 2.3 has the gettext function but dcgettext is missing. 127 So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 128 has dcgettext. */ 129 # if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) 130 131 # define gettext(Msgid) \ 132 dgettext (NULL, Msgid) 133 134 # define dgettext(Domainname, Msgid) \ 135 dcgettext (Domainname, Msgid, LC_MESSAGES) 136 137 # if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 138 /* This global variable is defined in loadmsgcat.c. We need a sign, 139 whether a new catalog was loaded, which can be associated with all 140 translations. */ 141 extern int _nl_msg_cat_cntr; 142 143 # define dcgettext(Domainname, Msgid, Category) \ 144 (__extension__ \ 145 ({ \ 146 char *__result; \ 147 if (__builtin_constant_p (Msgid)) \ 148 { \ 149 static char *__translation__; \ 150 static int __catalog_counter__; \ 151 if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ 152 { \ 153 __translation__ = \ 154 dcgettext__ (Domainname, Msgid, Category); \ 155 __catalog_counter__ = _nl_msg_cat_cntr; \ 156 } \ 157 __result = __translation__; \ 158 } \ 159 else \ 160 __result = dcgettext__ (Domainname, Msgid, Category); \ 161 __result; \ 162 })) 163 # endif 164 # endif 165 166 #else 167 168 # define gettext(Msgid) (Msgid) 169 # define dgettext(Domainname, Msgid) (Msgid) 170 # define dcgettext(Domainname, Msgid, Category) (Msgid) 171 # define textdomain(Domainname) ((char *) Domainname) 172 # define bindtextdomain(Domainname, Dirname) ((char *) Dirname) 173 174 #endif 175 176 /* @@ begin of epilog @@ */ 177 178 #ifdef __cplusplus 179 } 180 #endif 181 182 #endif 183