blob: 484cafa5628850930f8536c6c4e79fb26847153d [file] [log] [blame]
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +00001/*
2 * Copyright (c) 2010-2011 Ævar Arnfjörð Bjarmason
3 *
4 * This is a skeleton no-op implementation of gettext for Git.
5 * You can replace it with something that uses libintl.h and wraps
6 * gettext() to try out the translations.
7 */
8
9#ifndef GETTEXT_H
10#define GETTEXT_H
11
Jonathan Nieder0c9ea332011-03-09 21:17:58 -060012#if defined(_) || defined(Q_)
13#error "namespace conflict: '_' or 'Q_' is pre-defined?"
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000014#endif
15
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010016#ifndef NO_GETTEXT
17# include <libintl.h>
18#else
19# ifdef gettext
20# undef gettext
21# endif
22# define gettext(s) (s)
23# ifdef ngettext
24# undef ngettext
25# endif
26# define ngettext(s, p, n) ((n == 1) ? (s) : (p))
27#endif
28
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000029#define FORMAT_PRESERVING(n) __attribute__((format_arg(n)))
30
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010031#ifndef NO_GETTEXT
Johannes Schindelinc4137be2023-02-22 12:40:55 +010032extern int git_gettext_enabled;
Denton Liu55454422019-04-29 04:28:14 -040033void git_setup_gettext(void);
34int gettext_width(const char *s);
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010035#else
Johannes Schindelinc4137be2023-02-22 12:40:55 +010036#define git_gettext_enabled (0)
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010037static inline void git_setup_gettext(void)
38{
39}
Nguyễn Thái Ngọc Duy754395d2012-09-04 17:39:35 +070040static inline int gettext_width(const char *s)
41{
42 return strlen(s);
43}
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010044#endif
45
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000046static inline FORMAT_PRESERVING(1) const char *_(const char *msgid)
47{
Thomas Rast0c3a4332012-08-20 20:24:56 +020048 if (!*msgid)
49 return "";
Johannes Schindelinb524e892023-03-11 17:54:13 +010050 if (!git_gettext_enabled)
51 return msgid;
Ævar Arnfjörð Bjarmasond162b252021-01-20 19:27:58 +010052 return gettext(msgid);
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000053}
54
Jonathan Nieder0c9ea332011-03-09 21:17:58 -060055static inline FORMAT_PRESERVING(1) FORMAT_PRESERVING(2)
56const char *Q_(const char *msgid, const char *plu, unsigned long n)
57{
Johannes Schindelinc4137be2023-02-22 12:40:55 +010058 if (!git_gettext_enabled)
59 return n == 1 ? msgid : plu;
Ævar Arnfjörð Bjarmason5e9637c2011-11-18 00:14:42 +010060 return ngettext(msgid, plu, n);
Jonathan Nieder0c9ea332011-03-09 21:17:58 -060061}
62
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000063/* Mark msgid for translation but do not translate it. */
Ramsay Jones642f85f2011-04-07 19:41:48 +010064#define N_(msgid) msgid
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000065
Jeff King93f7d912015-02-25 22:04:16 -050066const char *get_preferred_languages(void);
Denton Liu55454422019-04-29 04:28:14 -040067int is_utf8_locale(void);
Jeff King93f7d912015-02-25 22:04:16 -050068
Ævar Arnfjörð Bjarmason65784832011-02-22 23:41:20 +000069#endif