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 | |
| 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
| -rw-r--r-- | navit/main.c | 3 | ||||
| -rw-r--r-- | navit/navit_nls.c | 50 | ||||
| -rw-r--r-- | navit/navit_nls.h | 2 |
3 files changed, 47 insertions, 8 deletions
diff --git a/navit/main.c b/navit/main.c index 90172f2ca..97af2c597 100644 --- a/navit/main.c +++ b/navit/main.c @@ -421,8 +421,7 @@ main_init_nls(void) #define STRINGIFY(x) STRINGIFY2(x) setlocale(LC_MESSAGES,STRINGIFY(FORCE_LOCALE)); #endif - bindtextdomain(PACKAGE, getenv("NAVIT_LOCALEDIR")); - bind_textdomain_codeset (PACKAGE, "UTF-8"); + navit_nls_add_textdomain(PACKAGE, getenv("NAVIT_LOCALEDIR")); textdomain(PACKAGE); #endif } 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 } diff --git a/navit/navit_nls.h b/navit/navit_nls.h index 764cd824a..fbb86a174 100644 --- a/navit/navit_nls.h +++ b/navit/navit_nls.h @@ -1,5 +1,7 @@ #ifndef __NAVIT_NLS_H__ +char *navit_nls_add_textdomain(const char *package, const char *dir); +char *navit_nls_remove_textdomain(const char *package); const char *navit_nls_gettext(const char *msgid); const char *navit_nls_ngettext(const char *msgid, const char *msgid_plural, unsigned long int n); |
