annotate src/gettext.h @ 1532:fffb62c7ba1e

Add pgettext for some ambiguous strings There are some strings which are ambiguous to translate. There is the pgettext function to solf that problem. For example, locations can be translated to german by Ortsangaben (geographical) or by Pfad (filesystem). I am sure there are also some ambiguous in other languages.
author mow
date Fri, 10 Apr 2009 09:47:20 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1532
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
1 /* Convenience header for conditional use of GNU <libintl.h>.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
2 Copyright (C) 1995-1998, 2000-2002, 2004-2006 Free Software Foundation, Inc.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
3
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify it
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
5 under the terms of the GNU General Public License as published
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
6 by the Free Software Foundation; either version 2, or (at your option)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
7 any later version.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
8
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
12 Library General Public License for more details.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
13
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
14 You should have received a copy of the GNU General Public
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
15 License along with this program; if not, write to the Free Software
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
17 USA. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
18
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
19 #ifndef _LIBGETTEXT_H
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
20 #define _LIBGETTEXT_H 1
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
21
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
22 /* NLS can be disabled through the configure --disable-nls option. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
23 #if ENABLE_NLS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
24
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
25 /* Get declarations of GNU message catalog functions. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
26 # include <libintl.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
27
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
28 /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
29 the gettext() and ngettext() macros. This is an alternative to calling
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
30 textdomain(), and is useful for libraries. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
31 # ifdef DEFAULT_TEXT_DOMAIN
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
32 # undef gettext
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
33 # define gettext(Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
34 dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
35 # undef ngettext
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
36 # define ngettext(Msgid1, Msgid2, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
37 dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
38 # endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
39
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
40 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
41
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
42 /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
43 chokes if dcgettext is defined as a macro. So include it now, to make
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
44 later inclusions of <locale.h> a NOP. We don't include <libintl.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
45 as well because people using "gettext.h" will not include <libintl.h>,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
46 and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
47 is OK. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
48 #if defined(__sun)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
49 # include <locale.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
50 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
51
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
52 /* Many header files from the libstdc++ coming with g++ 3.3 or newer include
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
53 <libintl.h>, which chokes if dcgettext is defined as a macro. So include
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
54 it now, to make later inclusions of <libintl.h> a NOP. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
55 #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
56 # include <cstdlib>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
57 # if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
58 # include <libintl.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
59 # endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
60 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
61
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
62 /* Disabled NLS.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
63 The casts to 'const char *' serve the purpose of producing warnings
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
64 for invalid uses of the value returned from these functions.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
65 On pre-ANSI systems without 'const', the config.h file is supposed to
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
66 contain "#define const". */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
67 # define gettext(Msgid) ((const char *) (Msgid))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
68 # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
69 # define dcgettext(Domainname, Msgid, Category) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
70 ((void) (Category), dgettext (Domainname, Msgid))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
71 # define ngettext(Msgid1, Msgid2, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
72 ((N) == 1 \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
73 ? ((void) (Msgid2), (const char *) (Msgid1)) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
74 : ((void) (Msgid1), (const char *) (Msgid2)))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
75 # define dngettext(Domainname, Msgid1, Msgid2, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
76 ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
77 # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
78 ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
79 # define textdomain(Domainname) ((const char *) (Domainname))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
80 # define bindtextdomain(Domainname, Dirname) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
81 ((void) (Domainname), (const char *) (Dirname))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
82 # define bind_textdomain_codeset(Domainname, Codeset) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
83 ((void) (Domainname), (const char *) (Codeset))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
84
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
85 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
86
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
87 /* A pseudo function call that serves as a marker for the automated
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
88 extraction of messages, but does not call gettext(). The run-time
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
89 translation is done at a different place in the code.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
90 The argument, String, should be a literal string. Concatenated strings
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
91 and other string expressions won't work.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
92 The macro's expansion is not parenthesized, so that it is suitable as
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
93 initializer for static 'char[]' or 'const char[]' variables. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
94 #define gettext_noop(String) String
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
95
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
96 /* The separator between msgctxt and msgid in a .mo file. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
97 #define GETTEXT_CONTEXT_GLUE "\004"
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
98
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
99 /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
100 MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
101 short and rarely need to change.
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
102 The letter 'p' stands for 'particular' or 'special'. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
103 #ifdef DEFAULT_TEXT_DOMAIN
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
104 # define pgettext(Msgctxt, Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
105 pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
106 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
107 # define pgettext(Msgctxt, Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
108 pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
109 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
110 #define dpgettext(Domainname, Msgctxt, Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
111 pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
112 #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
113 pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
114 #ifdef DEFAULT_TEXT_DOMAIN
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
115 # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
116 npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
117 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
118 # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
119 npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
120 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
121 #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
122 npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
123 #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
124 npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
125
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
126 #ifdef __GNUC__
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
127 __inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
128 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
129 #ifdef __cplusplus
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
130 inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
131 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
132 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
133 static const char *
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
134 pgettext_aux (const char *domain,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
135 const char *msg_ctxt_id, const char *msgid,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
136 int category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
137 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
138 const char *translation = dcgettext (domain, msg_ctxt_id, category);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
139 if (translation == msg_ctxt_id)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
140 return msgid;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
141 else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
142 return translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
143 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
144
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
145 #ifdef __GNUC__
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
146 __inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
147 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
148 #ifdef __cplusplus
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
149 inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
150 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
151 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
152 static const char *
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
153 npgettext_aux (const char *domain,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
154 const char *msg_ctxt_id, const char *msgid,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
155 const char *msgid_plural, unsigned long int n,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
156 int category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
157 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
158 const char *translation =
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
159 dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
160 if (translation == msg_ctxt_id || translation == msgid_plural)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
161 return (n == 1 ? msgid : msgid_plural);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
162 else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
163 return translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
164 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
165
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
166 /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
167 can be arbitrary expressions. But for string literals these macros are
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
168 less efficient than those above. */
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
169
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
170 #include <string.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
171
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
172 #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
173 (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
174 /* || __STDC_VERSION__ >= 199901L */ )
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
175
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
176 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
177 #include <stdlib.h>
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
178 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
179
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
180 #define pgettext_expr(Msgctxt, Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
181 dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
182 #define dpgettext_expr(Domainname, Msgctxt, Msgid) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
183 dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
184
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
185 #ifdef __GNUC__
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
186 __inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
187 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
188 #ifdef __cplusplus
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
189 inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
190 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
191 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
192 static const char *
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
193 dcpgettext_expr (const char *domain,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
194 const char *msgctxt, const char *msgid,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
195 int category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
196 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
197 size_t msgctxt_len = strlen (msgctxt) + 1;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
198 size_t msgid_len = strlen (msgid) + 1;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
199 const char *translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
200 #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
201 char msg_ctxt_id[msgctxt_len + msgid_len];
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
202 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
203 char buf[1024];
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
204 char *msg_ctxt_id =
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
205 (msgctxt_len + msgid_len <= sizeof (buf)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
206 ? buf
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
207 : (char *) malloc (msgctxt_len + msgid_len));
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
208 if (msg_ctxt_id != NULL)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
209 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
210 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
211 memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
212 msg_ctxt_id[msgctxt_len - 1] = '\004';
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
213 memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
214 translation = dcgettext (domain, msg_ctxt_id, category);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
215 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
216 if (msg_ctxt_id != buf)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
217 free (msg_ctxt_id);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
218 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
219 if (translation != msg_ctxt_id)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
220 return translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
221 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
222 return msgid;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
223 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
224
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
225 #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
226 dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
227 #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
228 dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
229
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
230 #ifdef __GNUC__
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
231 __inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
232 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
233 #ifdef __cplusplus
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
234 inline
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
235 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
236 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
237 static const char *
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
238 dcnpgettext_expr (const char *domain,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
239 const char *msgctxt, const char *msgid,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
240 const char *msgid_plural, unsigned long int n,
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
241 int category)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
242 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
243 size_t msgctxt_len = strlen (msgctxt) + 1;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
244 size_t msgid_len = strlen (msgid) + 1;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
245 const char *translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
246 #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
247 char msg_ctxt_id[msgctxt_len + msgid_len];
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
248 #else
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
249 char buf[1024];
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
250 char *msg_ctxt_id =
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
251 (msgctxt_len + msgid_len <= sizeof (buf)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
252 ? buf
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
253 : (char *) malloc (msgctxt_len + msgid_len));
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
254 if (msg_ctxt_id != NULL)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
255 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
256 {
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
257 memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
258 msg_ctxt_id[msgctxt_len - 1] = '\004';
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
259 memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
260 translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
261 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
262 if (msg_ctxt_id != buf)
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
263 free (msg_ctxt_id);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
264 #endif
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
265 if (!(translation == msg_ctxt_id || translation == msgid_plural))
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
266 return translation;
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
267 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
268 return (n == 1 ? msgid : msgid_plural);
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
269 }
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
270
fffb62c7ba1e Add pgettext for some ambiguous strings
mow
parents:
diff changeset
271 #endif /* _LIBGETTEXT_H */