diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-04-28 16:43:18 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-04-28 16:43:18 +0000 |
commit | 605f05bd9630ab5d7bdc8bcd4bce432d14627e58 (patch) | |
tree | 716c661abfc09710f64055805e59fb25d65592c0 /navit/navit_nls.c | |
parent | 1d94c3c46190ca91a043a141ed25ec1fa8015a5f (diff) | |
download | navit-605f05bd9630ab5d7bdc8bcd4bce432d14627e58.tar.gz |
Add:Core:Allow multiple text domains for navit translations
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5458 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/navit_nls.c')
-rw-r--r-- | navit/navit_nls.c | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/navit/navit_nls.c b/navit/navit_nls.c index 317410ded..692d3dcd3 100644 --- a/navit/navit_nls.c +++ b/navit/navit_nls.c @@ -1,33 +1,71 @@ #include "config.h" #include "debug.h" +#include <glib.h> #ifdef USE_LIBGNUINTL #include <libgnuintl.h> #else #include <libintl.h> #endif +static GList *textdomains; +char * +navit_nls_add_textdomain(const char *package, const char *dir) +{ +#ifdef ENABLE_NLS + char *ret=bindtextdomain(package, dir); + bind_textdomain_codeset(package, "UTF-8"); + textdomains=g_list_append(textdomains, g_strdup(package)); + return ret; +#endif +} + +void +navit_nls_remove_textdomain(const char *package) +{ +#ifdef ENABLE_NLS + GList *i=textdomains; + while (i) { + if (!strcmp(i->data, package)) { + textdomains=g_list_remove_all(textdomains, i->data); + g_free(i->data); + return; + } + i=g_list_next(i); + } +#endif +} const char * navit_nls_gettext(const char *msgid) { #ifdef ENABLE_NLS - return gettext(msgid); -#else - return msgid; + GList *i=textdomains; + while (i) { + const char *ret=dgettext(i->data, msgid); + if (ret != msgid) + return ret; + i=g_list_next(i); + } #endif + return msgid; } const char * navit_nls_ngettext(const char *msgid, const char *msgid_plural, unsigned long int n) { #ifdef ENABLE_NLS - return ngettext(msgid, msgid_plural, n); -#else + GList *i=textdomains; + while (i) { + const char *ret=dngettext(i->data, msgid, msgid_plural, n); + if (ret != msgid && ret != msgid_plural) + return ret; + i=g_list_next(i); + } +#endif if (n == 1) { return msgid; } else { return msgid_plural; } -#endif } |