X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=share%2Flang.c;h=999c2395180485c877ee903b9db6bfd1a5e73047;hb=4483dfdacd29073b37a6429ca8e123c80deac75a;hp=03aaf7c80bdd2fc0fca11357b3f43a4e5d87c18c;hpb=7794d0676d04f9daf4aaff9a7be333749ef2ce7d;p=neverball diff --git a/share/lang.c b/share/lang.c index 03aaf7c..999c239 100644 --- a/share/lang.c +++ b/share/lang.c @@ -14,27 +14,64 @@ */ #include -#include #include +#include +#include +#include #include "lang.h" +#include "common.h" +#include "base_config.h" +#include "fs.h" + +/*---------------------------------------------------------------------------*/ + +#define DEFAULT_CODESET "UTF-8" /*---------------------------------------------------------------------------*/ -void lang_init(const char *domain, const char *default_dir) +void lang_init(const char *domain) { - char *dir = getenv("NEVERBALL_LOCALE"); +#if ENABLE_NLS + char *dir = strdup(getenv("NEVERBALL_LOCALE")); - setlocale(LC_ALL, ""); + if (!dir) + { + if (path_is_abs(CONFIG_LOCALE)) + dir = strdup(CONFIG_LOCALE); + else + dir = concat_string(fs_base_dir(), "/", CONFIG_LOCALE, NULL); + } + + errno = 0; - bindtextdomain(domain, dir ? dir : default_dir); - bind_textdomain_codeset(domain, "UTF-8"); + if (!setlocale(LC_ALL, "")) + { + fprintf(stderr, "Failed to set LC_ALL to native locale: %s\n", + errno ? strerror(errno) : "Unknown error"); + } + + /* The C locale is guaranteed (sort of) to be available. */ + + setlocale(LC_NUMERIC, "C"); + + bindtextdomain(domain, dir); + bind_textdomain_codeset(domain, DEFAULT_CODESET); textdomain(domain); + + free(dir); +#else + return; +#endif } const char *sgettext(const char *msgid) { +#if ENABLE_NLS const char *msgval = gettext(msgid); +#else + const char *msgval = msgid; +#endif if (msgval == msgid) { @@ -45,4 +82,19 @@ const char *sgettext(const char *msgid) return msgval; } +const char *get_local_text(const char *msgid) +{ +#if ENABLE_NLS + char *msgstr, *domain = textdomain(NULL); + + bind_textdomain_codeset(domain, ""); + msgstr = gettext(msgid); + bind_textdomain_codeset(domain, DEFAULT_CODESET); + + return msgstr; +#else + return msgid; +#endif +} + /*---------------------------------------------------------------------------*/