1 /*****************************************************************************
2 * textdomain.c : Modules text domain management
3 *****************************************************************************
4 * Copyright (C) 2010 RĂ©mi Denis-Courmont
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19 *****************************************************************************/
25 #include <vlc_common.h>
26 #include "modules/modules.h"
30 # if defined (__APPLE__) || defined (_WIN32) || defined(__OS2__)
31 # include <vlc_charset.h>
35 int vlc_bindtextdomain (const char *domain
)
37 #if defined (ENABLE_NLS)
38 /* Specify where to find the locales for current domain */
39 # if !defined (__APPLE__) && !defined (_WIN32) && !defined(__OS2__)
40 static const char path
[] = LOCALEDIR
;
42 if (bindtextdomain (domain
, path
) == NULL
)
44 fprintf (stderr
, "%s: text domain not found in %s\n", domain
, path
);
48 char *datadir
= config_GetDataDir();
49 if (unlikely(datadir
== NULL
))
53 int ret
= asprintf (&upath
, "%s" DIR_SEP
"locale", datadir
);
55 if (unlikely(ret
== -1))
58 char *lpath
= ToLocaleDup (upath
);
59 if (lpath
== NULL
|| bindtextdomain (domain
, lpath
) == NULL
)
62 fprintf (stderr
, "%s: text domain not found in %s\n", domain
, upath
);
70 /* LibVLC wants all messages in UTF-8.
71 * Unfortunately, we cannot ask UTF-8 for strerror_r(), strsignal_r()
72 * and other functions that are not part of our text domain.
74 if (bind_textdomain_codeset (PACKAGE_NAME
, "UTF-8") == NULL
)
76 fprintf (stderr
, "%s: UTF-8 encoding not available\n", domain
);
77 // Unbinds the text domain to avoid broken encoding
78 bindtextdomain (PACKAGE_NAME
, "/DOES_NOT_EXIST");
82 /* LibVLC does NOT set the default textdomain, since it is a library.
83 * This could otherwise break programs using LibVLC (other than VLC).
84 * textdomain (PACKAGE_NAME);
87 #else /* !ENABLE_NLS */
95 * In-tree plugins share their gettext domain with LibVLC.
97 char *vlc_gettext (const char *msgid
)
101 return dgettext (PACKAGE_NAME
, msgid
);
103 return (char *)msgid
;
106 char *vlc_ngettext (const char *msgid
, const char *plural
, unsigned long n
)
110 return dngettext (PACKAGE_NAME
, msgid
, plural
, n
);
112 return (char *)((n
== 1) ? msgid
: plural
);