libgnuintl.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:10k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /* Message catalogs for internationalization.
  2.    Copyright (C) 1995-1997, 2000-2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  14.    USA.  */
  15. #ifndef _LIBINTL_H
  16. #define _LIBINTL_H 1
  17. #include <locale.h>
  18. /* The LC_MESSAGES locale category is the category used by the functions
  19.    gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
  20.    On systems that don't define it, use an arbitrary value instead.
  21.    On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
  22.    then includes <libintl.h> (i.e. this file!) and then only defines
  23.    LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
  24.    in this case.  */
  25. #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
  26. # define LC_MESSAGES 1729
  27. #endif
  28. /* We define an additional symbol to signal that we use the GNU
  29.    implementation of gettext.  */
  30. #define __USE_GNU_GETTEXT 1
  31. /* Provide information about the supported file formats.  Returns the
  32.    maximum minor revision number supported for a given major revision.  */
  33. #define __GNU_GETTEXT_SUPPORTED_REVISION(major) 
  34.   ((major) == 0 ? 1 : -1)
  35. /* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
  36.    precedence over _conio_gettext.  */
  37. #ifdef __DJGPP__
  38. # undef gettext
  39. #endif
  40. /* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
  41.    used by programs.  Similarly, test __PROTOTYPES, not PROTOTYPES.  */
  42. #ifndef _INTL_PARAMS
  43. # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
  44. #  define _INTL_PARAMS(args) args
  45. # else
  46. #  define _INTL_PARAMS(args) ()
  47. # endif
  48. #endif
  49. #ifdef __cplusplus
  50. extern "C" {
  51. #endif
  52. /* We redirect the functions to those prefixed with "libintl_".  This is
  53.    necessary, because some systems define gettext/textdomain/... in the C
  54.    library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
  55.    If we used the unprefixed names, there would be cases where the
  56.    definition in the C library would override the one in the libintl.so
  57.    shared library.  Recall that on ELF systems, the symbols are looked
  58.    up in the following order:
  59.      1. in the executable,
  60.      2. in the shared libraries specified on the link command line, in order,
  61.      3. in the dependencies of the shared libraries specified on the link
  62.         command line,
  63.      4. in the dlopen()ed shared libraries, in the order in which they were
  64.         dlopen()ed.
  65.    The definition in the C library would override the one in libintl.so if
  66.    either
  67.      * -lc is given on the link command line and -lintl isn't, or
  68.      * -lc is given on the link command line before -lintl, or
  69.      * libintl.so is a dependency of a dlopen()ed shared library but not
  70.        linked to the executable at link time.
  71.    Since Solaris gettext() behaves differently than GNU gettext(), this
  72.    would be unacceptable.
  73.    The redirection happens by default through macros in C, so that &gettext
  74.    is independent of the compilation unit, but through inline functions in
  75.    C++, in order not to interfere with the name mangling of class fields or
  76.    class methods called 'gettext'.  */
  77. /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
  78.    If he doesn't, we choose the method.  A third possible method is
  79.    _INTL_REDIRECT_ASM, supported only by GCC.  */
  80. #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
  81. # if __GNUC__ >= 2 && (defined __STDC__ || defined __cplusplus)
  82. #  define _INTL_REDIRECT_ASM
  83. # else
  84. #  ifdef __cplusplus
  85. #   define _INTL_REDIRECT_INLINE
  86. #  else
  87. #   define _INTL_REDIRECT_MACROS
  88. #  endif
  89. # endif
  90. #endif
  91. /* Auxiliary macros.  */
  92. #ifdef _INTL_REDIRECT_ASM
  93. # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
  94. # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
  95. # define _INTL_STRINGIFY(prefix) #prefix
  96. #else
  97. # define _INTL_ASM(cname)
  98. #endif
  99. /* Look up MSGID in the current default message catalog for the current
  100.    LC_MESSAGES locale.  If not found, returns MSGID itself (the default
  101.    text).  */
  102. #ifdef _INTL_REDIRECT_INLINE
  103. extern char *libintl_gettext (const char *__msgid);
  104. static inline char *gettext (const char *__msgid)
  105. {
  106.   return libintl_gettext (__msgid);
  107. }
  108. #else
  109. #ifdef _INTL_REDIRECT_MACROS
  110. # define gettext libintl_gettext
  111. #endif
  112. extern char *gettext _INTL_PARAMS ((const char *__msgid))
  113.        _INTL_ASM (libintl_gettext);
  114. #endif
  115. /* Look up MSGID in the DOMAINNAME message catalog for the current
  116.    LC_MESSAGES locale.  */
  117. #ifdef _INTL_REDIRECT_INLINE
  118. extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
  119. static inline char *dgettext (const char *__domainname, const char *__msgid)
  120. {
  121.   return libintl_dgettext (__domainname, __msgid);
  122. }
  123. #else
  124. #ifdef _INTL_REDIRECT_MACROS
  125. # define dgettext libintl_dgettext
  126. #endif
  127. extern char *dgettext _INTL_PARAMS ((const char *__domainname,
  128.      const char *__msgid))
  129.        _INTL_ASM (libintl_dgettext);
  130. #endif
  131. /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
  132.    locale.  */
  133. #ifdef _INTL_REDIRECT_INLINE
  134. extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
  135. int __category);
  136. static inline char *dcgettext (const char *__domainname, const char *__msgid,
  137.        int __category)
  138. {
  139.   return libintl_dcgettext (__domainname, __msgid, __category);
  140. }
  141. #else
  142. #ifdef _INTL_REDIRECT_MACROS
  143. # define dcgettext libintl_dcgettext
  144. #endif
  145. extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
  146.       const char *__msgid,
  147.       int __category))
  148.        _INTL_ASM (libintl_dcgettext);
  149. #endif
  150. /* Similar to `gettext' but select the plural form corresponding to the
  151.    number N.  */
  152. #ifdef _INTL_REDIRECT_INLINE
  153. extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
  154.        unsigned long int __n);
  155. static inline char *ngettext (const char *__msgid1, const char *__msgid2,
  156.       unsigned long int __n)
  157. {
  158.   return libintl_ngettext (__msgid1, __msgid2, __n);
  159. }
  160. #else
  161. #ifdef _INTL_REDIRECT_MACROS
  162. # define ngettext libintl_ngettext
  163. #endif
  164. extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
  165.      const char *__msgid2,
  166.      unsigned long int __n))
  167.        _INTL_ASM (libintl_ngettext);
  168. #endif
  169. /* Similar to `dgettext' but select the plural form corresponding to the
  170.    number N.  */
  171. #ifdef _INTL_REDIRECT_INLINE
  172. extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
  173. const char *__msgid2, unsigned long int __n);
  174. static inline char *dngettext (const char *__domainname, const char *__msgid1,
  175.        const char *__msgid2, unsigned long int __n)
  176. {
  177.   return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
  178. }
  179. #else
  180. #ifdef _INTL_REDIRECT_MACROS
  181. # define dngettext libintl_dngettext
  182. #endif
  183. extern char *dngettext _INTL_PARAMS ((const char *__domainname,
  184.       const char *__msgid1,
  185.       const char *__msgid2,
  186.       unsigned long int __n))
  187.        _INTL_ASM (libintl_dngettext);
  188. #endif
  189. /* Similar to `dcgettext' but select the plural form corresponding to the
  190.    number N.  */
  191. #ifdef _INTL_REDIRECT_INLINE
  192. extern char *libintl_dcngettext (const char *__domainname,
  193.  const char *__msgid1, const char *__msgid2,
  194.  unsigned long int __n, int __category);
  195. static inline char *dcngettext (const char *__domainname,
  196. const char *__msgid1, const char *__msgid2,
  197. unsigned long int __n, int __category)
  198. {
  199.   return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
  200. }
  201. #else
  202. #ifdef _INTL_REDIRECT_MACROS
  203. # define dcngettext libintl_dcngettext
  204. #endif
  205. extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
  206.        const char *__msgid1,
  207.        const char *__msgid2,
  208.        unsigned long int __n,
  209.        int __category))
  210.        _INTL_ASM (libintl_dcngettext);
  211. #endif
  212. /* Set the current default message catalog to DOMAINNAME.
  213.    If DOMAINNAME is null, return the current default.
  214.    If DOMAINNAME is "", reset to the default of "messages".  */
  215. #ifdef _INTL_REDIRECT_INLINE
  216. extern char *libintl_textdomain (const char *__domainname);
  217. static inline char *textdomain (const char *__domainname)
  218. {
  219.   return libintl_textdomain (__domainname);
  220. }
  221. #else
  222. #ifdef _INTL_REDIRECT_MACROS
  223. # define textdomain libintl_textdomain
  224. #endif
  225. extern char *textdomain _INTL_PARAMS ((const char *__domainname))
  226.        _INTL_ASM (libintl_textdomain);
  227. #endif
  228. /* Specify that the DOMAINNAME message catalog will be found
  229.    in DIRNAME rather than in the system locale data base.  */
  230. #ifdef _INTL_REDIRECT_INLINE
  231. extern char *libintl_bindtextdomain (const char *__domainname,
  232.      const char *__dirname);
  233. static inline char *bindtextdomain (const char *__domainname,
  234.     const char *__dirname)
  235. {
  236.   return libintl_bindtextdomain (__domainname, __dirname);
  237. }
  238. #else
  239. #ifdef _INTL_REDIRECT_MACROS
  240. # define bindtextdomain libintl_bindtextdomain
  241. #endif
  242. extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
  243.    const char *__dirname))
  244.        _INTL_ASM (libintl_bindtextdomain);
  245. #endif
  246. /* Specify the character encoding in which the messages from the
  247.    DOMAINNAME message catalog will be returned.  */
  248. #ifdef _INTL_REDIRECT_INLINE
  249. extern char *libintl_bind_textdomain_codeset (const char *__domainname,
  250.       const char *__codeset);
  251. static inline char *bind_textdomain_codeset (const char *__domainname,
  252.      const char *__codeset)
  253. {
  254.   return libintl_bind_textdomain_codeset (__domainname, __codeset);
  255. }
  256. #else
  257. #ifdef _INTL_REDIRECT_MACROS
  258. # define bind_textdomain_codeset libintl_bind_textdomain_codeset
  259. #endif
  260. extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
  261.     const char *__codeset))
  262.        _INTL_ASM (libintl_bind_textdomain_codeset);
  263. #endif
  264. #ifdef __cplusplus
  265. }
  266. #endif
  267. #endif /* libintl.h */