summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-04-28 16:43:18 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-04-28 16:43:18 +0000
commit605f05bd9630ab5d7bdc8bcd4bce432d14627e58 (patch)
tree716c661abfc09710f64055805e59fb25d65592c0
parent1d94c3c46190ca91a043a141ed25ec1fa8015a5f (diff)
downloadnavit-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.c3
-rw-r--r--navit/navit_nls.c50
-rw-r--r--navit/navit_nls.h2
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);