347
|
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
|