*/
#include <string.h>
-#include <stdlib.h>
#include <locale.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
#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)
{
#if ENABLE_NLS
- char *dir = getenv("NEVERBALL_LOCALE");
+ char *dir = strdup(getenv("NEVERBALL_LOCALE"));
+
+ if (!dir)
+ {
+ if (path_is_abs(CONFIG_LOCALE))
+ dir = strdup(CONFIG_LOCALE);
+ else
+ dir = concat_string(fs_base_dir(), "/", CONFIG_LOCALE, NULL);
+ }
+
+ errno = 0;
+
+ 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_ALL, "");
+ setlocale(LC_NUMERIC, "C");
- bindtextdomain(domain, dir ? dir : default_dir);
- bind_textdomain_codeset(domain, "UTF-8");
+ bindtextdomain(domain, dir);
+ bind_textdomain_codeset(domain, DEFAULT_CODESET);
textdomain(domain);
+
+ free(dir);
#else
return;
#endif
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
+}
+
/*---------------------------------------------------------------------------*/