libintl.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:13k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /* Message catalogs for internationalization.
  2.    Copyright (C) 1995-1997, 2000-2004 Free Software Foundation, Inc.
  3.    This program is free software; you can redistribute it and/or modify it
  4.    under the terms of the GNU Library General Public License as published
  5.    by the Free Software Foundation; either version 2, or (at your option)
  6.    any later version.
  7.    This program is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.    Library General Public License for more details.
  11.    You should have received a copy of the GNU Library General Public
  12.    License along with this program; if not, write to the Free Software
  13.    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  14.    USA.  */
  15. #ifndef _LIBINTL_H
  16. #define _LIBINTL_H 1
  17. #ifdef BUILDING_LIBINTL
  18. #define LIBINTL_DLL_EXPORTED __declspec(dllexport)
  19. #else
  20. #define LIBINTL_DLL_EXPORTED __declspec(dllimport)
  21. #endif
  22. #include <locale.h>
  23. /* The LC_MESSAGES locale category is the category used by the functions
  24.    gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
  25.    On systems that don't define it, use an arbitrary value instead.
  26.    On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
  27.    then includes <libintl.h> (i.e. this file!) and then only defines
  28.    LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
  29.    in this case.  */
  30. #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
  31. # define LC_MESSAGES 1729
  32. #endif
  33. /* We define an additional symbol to signal that we use the GNU
  34.    implementation of gettext.  */
  35. #define __USE_GNU_GETTEXT 1
  36. /* Provide information about the supported file formats.  Returns the
  37.    maximum minor revision number supported for a given major revision.  */
  38. #define __GNU_GETTEXT_SUPPORTED_REVISION(major) 
  39.   ((major) == 0 || (major) == 1 ? 1 : -1)
  40. /* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
  41.    precedence over _conio_gettext.  */
  42. #ifdef __DJGPP__
  43. # undef gettext
  44. #endif
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. /* We redirect the functions to those prefixed with "libintl_".  This is
  49.    necessary, because some systems define gettext/textdomain/... in the C
  50.    library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
  51.    If we used the unprefixed names, there would be cases where the
  52.    definition in the C library would override the one in the libintl.so
  53.    shared library.  Recall that on ELF systems, the symbols are looked
  54.    up in the following order:
  55.      1. in the executable,
  56.      2. in the shared libraries specified on the link command line, in order,
  57.      3. in the dependencies of the shared libraries specified on the link
  58.         command line,
  59.      4. in the dlopen()ed shared libraries, in the order in which they were
  60.         dlopen()ed.
  61.    The definition in the C library would override the one in libintl.so if
  62.    either
  63.      * -lc is given on the link command line and -lintl isn't, or
  64.      * -lc is given on the link command line before -lintl, or
  65.      * libintl.so is a dependency of a dlopen()ed shared library but not
  66.        linked to the executable at link time.
  67.    Since Solaris gettext() behaves differently than GNU gettext(), this
  68.    would be unacceptable.
  69.    The redirection happens by default through macros in C, so that &gettext
  70.    is independent of the compilation unit, but through inline functions in
  71.    C++, in order not to interfere with the name mangling of class fields or
  72.    class methods called 'gettext'.  */
  73. /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
  74.    If he doesn't, we choose the method.  A third possible method is
  75.    _INTL_REDIRECT_ASM, supported only by GCC.  */
  76. #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
  77. # if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
  78. #  define _INTL_REDIRECT_ASM
  79. # else
  80. #  ifdef __cplusplus
  81. #   define _INTL_REDIRECT_INLINE
  82. #  else
  83. #   define _INTL_REDIRECT_MACROS
  84. #  endif
  85. # endif
  86. #endif
  87. /* Auxiliary macros.  */
  88. #ifdef _INTL_REDIRECT_ASM
  89. # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
  90. # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
  91. # define _INTL_STRINGIFY(prefix) #prefix
  92. #else
  93. # define _INTL_ASM(cname)
  94. #endif
  95. /* Look up MSGID in the current default message catalog for the current
  96.    LC_MESSAGES locale.  If not found, returns MSGID itself (the default
  97.    text).  */
  98. #ifdef _INTL_REDIRECT_INLINE
  99. extern LIBINTL_DLL_EXPORTED char *libintl_gettext (const char *__msgid);
  100. static inline char *gettext (const char *__msgid)
  101. {
  102.   return libintl_gettext (__msgid);
  103. }
  104. #else
  105. #ifdef _INTL_REDIRECT_MACROS
  106. # define gettext libintl_gettext
  107. #endif
  108. extern LIBINTL_DLL_EXPORTED char *gettext (const char *__msgid)
  109.        _INTL_ASM (libintl_gettext);
  110. #endif
  111. /* Look up MSGID in the DOMAINNAME message catalog for the current
  112.    LC_MESSAGES locale.  */
  113. #ifdef _INTL_REDIRECT_INLINE
  114. extern LIBINTL_DLL_EXPORTED char *libintl_dgettext (const char *__domainname, const char *__msgid);
  115. static inline char *dgettext (const char *__domainname, const char *__msgid)
  116. {
  117.   return libintl_dgettext (__domainname, __msgid);
  118. }
  119. #else
  120. #ifdef _INTL_REDIRECT_MACROS
  121. # define dgettext libintl_dgettext
  122. #endif
  123. extern LIBINTL_DLL_EXPORTED char *dgettext (const char *__domainname, const char *__msgid)
  124.        _INTL_ASM (libintl_dgettext);
  125. #endif
  126. /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
  127.    locale.  */
  128. #ifdef _INTL_REDIRECT_INLINE
  129. extern LIBINTL_DLL_EXPORTED char *libintl_dcgettext (const char *__domainname, const char *__msgid,
  130. int __category);
  131. static inline char *dcgettext (const char *__domainname, const char *__msgid,
  132.        int __category)
  133. {
  134.   return libintl_dcgettext (__domainname, __msgid, __category);
  135. }
  136. #else
  137. #ifdef _INTL_REDIRECT_MACROS
  138. # define dcgettext libintl_dcgettext
  139. #endif
  140. extern LIBINTL_DLL_EXPORTED char *dcgettext (const char *__domainname, const char *__msgid,
  141. int __category)
  142.        _INTL_ASM (libintl_dcgettext);
  143. #endif
  144. /* Similar to `gettext' but select the plural form corresponding to the
  145.    number N.  */
  146. #ifdef _INTL_REDIRECT_INLINE
  147. extern LIBINTL_DLL_EXPORTED char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
  148.        unsigned long int __n);
  149. static inline char *ngettext (const char *__msgid1, const char *__msgid2,
  150.       unsigned long int __n)
  151. {
  152.   return libintl_ngettext (__msgid1, __msgid2, __n);
  153. }
  154. #else
  155. #ifdef _INTL_REDIRECT_MACROS
  156. # define ngettext libintl_ngettext
  157. #endif
  158. extern LIBINTL_DLL_EXPORTED char *ngettext (const char *__msgid1, const char *__msgid2,
  159.        unsigned long int __n)
  160.        _INTL_ASM (libintl_ngettext);
  161. #endif
  162. /* Similar to `dgettext' but select the plural form corresponding to the
  163.    number N.  */
  164. #ifdef _INTL_REDIRECT_INLINE
  165. extern LIBINTL_DLL_EXPORTED char *libintl_dngettext (const char *__domainname, const char *__msgid1,
  166. const char *__msgid2, unsigned long int __n);
  167. static inline char *dngettext (const char *__domainname, const char *__msgid1,
  168.        const char *__msgid2, unsigned long int __n)
  169. {
  170.   return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
  171. }
  172. #else
  173. #ifdef _INTL_REDIRECT_MACROS
  174. # define dngettext libintl_dngettext
  175. #endif
  176. extern LIBINTL_DLL_EXPORTED char *dngettext (const char *__domainname,
  177. const char *__msgid1, const char *__msgid2,
  178. unsigned long int __n)
  179.        _INTL_ASM (libintl_dngettext);
  180. #endif
  181. /* Similar to `dcgettext' but select the plural form corresponding to the
  182.    number N.  */
  183. #ifdef _INTL_REDIRECT_INLINE
  184. extern LIBINTL_DLL_EXPORTED char *libintl_dcngettext (const char *__domainname,
  185.  const char *__msgid1, const char *__msgid2,
  186.  unsigned long int __n, int __category);
  187. static inline char *dcngettext (const char *__domainname,
  188. const char *__msgid1, const char *__msgid2,
  189. unsigned long int __n, int __category)
  190. {
  191.   return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
  192. }
  193. #else
  194. #ifdef _INTL_REDIRECT_MACROS
  195. # define dcngettext libintl_dcngettext
  196. #endif
  197. extern LIBINTL_DLL_EXPORTED char *dcngettext (const char *__domainname,
  198.  const char *__msgid1, const char *__msgid2,
  199.  unsigned long int __n, int __category)
  200.        _INTL_ASM (libintl_dcngettext);
  201. #endif
  202. /* Set the current default message catalog to DOMAINNAME.
  203.    If DOMAINNAME is null, return the current default.
  204.    If DOMAINNAME is "", reset to the default of "messages".  */
  205. #ifdef _INTL_REDIRECT_INLINE
  206. extern LIBINTL_DLL_EXPORTED char *libintl_textdomain (const char *__domainname);
  207. static inline char *textdomain (const char *__domainname)
  208. {
  209.   return libintl_textdomain (__domainname);
  210. }
  211. #else
  212. #ifdef _INTL_REDIRECT_MACROS
  213. # define textdomain libintl_textdomain
  214. #endif
  215. extern LIBINTL_DLL_EXPORTED char *textdomain (const char *__domainname)
  216.        _INTL_ASM (libintl_textdomain);
  217. #endif
  218. /* Specify that the DOMAINNAME message catalog will be found
  219.    in DIRNAME rather than in the system locale data base.  */
  220. #ifdef _INTL_REDIRECT_INLINE
  221. extern LIBINTL_DLL_EXPORTED char *libintl_bindtextdomain (const char *__domainname,
  222.      const char *__dirname);
  223. static inline char *bindtextdomain (const char *__domainname,
  224.     const char *__dirname)
  225. {
  226.   return libintl_bindtextdomain (__domainname, __dirname);
  227. }
  228. #else
  229. #ifdef _INTL_REDIRECT_MACROS
  230. # define bindtextdomain libintl_bindtextdomain
  231. #endif
  232. extern LIBINTL_DLL_EXPORTED char *bindtextdomain (const char *__domainname, const char *__dirname)
  233.        _INTL_ASM (libintl_bindtextdomain);
  234. #endif
  235. /* Specify the character encoding in which the messages from the
  236.    DOMAINNAME message catalog will be returned.  */
  237. #ifdef _INTL_REDIRECT_INLINE
  238. extern LIBINTL_DLL_EXPORTED char *libintl_bind_textdomain_codeset (const char *__domainname,
  239.       const char *__codeset);
  240. static inline char *bind_textdomain_codeset (const char *__domainname,
  241.      const char *__codeset)
  242. {
  243.   return libintl_bind_textdomain_codeset (__domainname, __codeset);
  244. }
  245. #else
  246. #ifdef _INTL_REDIRECT_MACROS
  247. # define bind_textdomain_codeset libintl_bind_textdomain_codeset
  248. #endif
  249. extern LIBINTL_DLL_EXPORTED char *bind_textdomain_codeset (const char *__domainname,
  250.       const char *__codeset)
  251.        _INTL_ASM (libintl_bind_textdomain_codeset);
  252. #endif
  253. /* Support for format strings with positions in *printf(), following the
  254.    POSIX/XSI specification.
  255.    Note: These replacements for the *printf() functions are visible only
  256.    in source files that #include <libintl.h> or #include "gettext.h".
  257.    Packages that use *printf() in source files that don't refer to _()
  258.    or gettext() but for which the format string could be the return value
  259.    of _() or gettext() need to add this #include.  Oh well.  */
  260. #if !0
  261. #include <stdio.h>
  262. #include <stddef.h>
  263. /* Get va_list.  */
  264. #if __STDC__ || defined __cplusplus || defined _MSC_VER
  265. # include <stdarg.h>
  266. #else
  267. # include <varargs.h>
  268. #endif
  269. #undef fprintf
  270. #define fprintf libintl_fprintf
  271. extern LIBINTL_DLL_EXPORTED int fprintf (FILE *, const char *, ...);
  272. #undef vfprintf
  273. #define vfprintf libintl_vfprintf
  274. extern LIBINTL_DLL_EXPORTED int vfprintf (FILE *, const char *, va_list);
  275. #undef printf
  276. #define printf libintl_printf
  277. extern LIBINTL_DLL_EXPORTED int printf (const char *, ...);
  278. #undef vprintf
  279. #define vprintf libintl_vprintf
  280. extern LIBINTL_DLL_EXPORTED int vprintf (const char *, va_list);
  281. #undef sprintf
  282. #define sprintf libintl_sprintf
  283. extern LIBINTL_DLL_EXPORTED int sprintf (char *, const char *, ...);
  284. #undef vsprintf
  285. #define vsprintf libintl_vsprintf
  286. extern LIBINTL_DLL_EXPORTED int vsprintf (char *, const char *, va_list);
  287. #if 0
  288. #undef snprintf
  289. #define snprintf libintl_snprintf
  290. extern LIBINTL_DLL_EXPORTED int snprintf (char *, size_t, const char *, ...);
  291. #undef vsnprintf
  292. #define vsnprintf libintl_vsnprintf
  293. extern LIBINTL_DLL_EXPORTED int vsnprintf (char *, size_t, const char *, va_list);
  294. #endif
  295. #if 0
  296. #undef asprintf
  297. #define asprintf libintl_asprintf
  298. extern LIBINTL_DLL_EXPORTED int asprintf (char **, const char *, ...);
  299. #undef vasprintf
  300. #define vasprintf libintl_vasprintf
  301. extern LIBINTL_DLL_EXPORTED int vasprintf (char **, const char *, va_list);
  302. #endif
  303. #if 1
  304. #undef fwprintf
  305. #define fwprintf libintl_fwprintf
  306. extern LIBINTL_DLL_EXPORTED int fwprintf (FILE *, const wchar_t *, ...);
  307. #undef vfwprintf
  308. #define vfwprintf libintl_vfwprintf
  309. extern LIBINTL_DLL_EXPORTED int vfwprintf (FILE *, const wchar_t *, va_list);
  310. #undef wprintf
  311. #define wprintf libintl_wprintf
  312. extern LIBINTL_DLL_EXPORTED int wprintf (const wchar_t *, ...);
  313. #undef vwprintf
  314. #define vwprintf libintl_vwprintf
  315. extern LIBINTL_DLL_EXPORTED int vwprintf (const wchar_t *, va_list);
  316. #undef swprintf
  317. #define swprintf libintl_swprintf
  318. extern LIBINTL_DLL_EXPORTED int swprintf (wchar_t *, size_t, const wchar_t *, ...);
  319. #undef vswprintf
  320. #define vswprintf libintl_vswprintf
  321. extern LIBINTL_DLL_EXPORTED int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
  322. #endif
  323. #endif
  324. /* Support for relocatable packages.  */
  325. /* Sets the original and the current installation prefix of the package.
  326.    Relocation simply replaces a pathname starting with the original prefix
  327.    by the corresponding pathname with the current prefix instead.  Both
  328.    prefixes should be directory names without trailing slash (i.e. use ""
  329.    instead of "/").  */
  330. #define libintl_set_relocation_prefix libintl_set_relocation_prefix
  331. extern LIBINTL_DLL_EXPORTED void
  332.        libintl_set_relocation_prefix (const char *orig_prefix,
  333.       const char *curr_prefix);
  334. #ifdef __cplusplus
  335. }
  336. #endif
  337. #endif /* libintl.h */