]>
Commit | Line | Data |
---|---|---|
705db0b5 AD |
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 automatical 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 |