mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 11:26:16 +01:00
Added g_disable_setlocale().
2008-05-17 Yair Hershkovitz <yairhr@gmail.com> * glib/glib.symbols: * glib/gi18n.h: Added g_disable_setlocale(). * glib/gi18n.c: Added g_disable_setlocale() API to disable setting the locale in g_i18n_init(). Dont disable translations if textdomain was not set before calling g_i18n_init(). Dont disable translations if the locale is "C". svn path=/trunk/; revision=6894
This commit is contained in:
parent
a6cd26d656
commit
49734ebc7f
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2008-05-17 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* glib/glib.symbols:
|
||||
* glib/gi18n.h: Added g_disable_setlocale().
|
||||
|
||||
* glib/gi18n.c: Added g_disable_setlocale() API to disable setting
|
||||
the locale in g_i18n_init(). Dont disable translations if textdomain
|
||||
was not set before calling g_i18n_init(). Dont disable translations if
|
||||
the locale is "C".
|
||||
|
||||
2008-05-16 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* config.h.win32.in: Update to match the configure-produced one.
|
||||
|
68
glib/gi18n.c
68
glib/gi18n.c
@ -31,29 +31,57 @@
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
|
||||
static gboolean g_should_translate = TRUE;
|
||||
static gboolean should_translate = TRUE;
|
||||
static gboolean do_setlocale = TRUE;
|
||||
static gboolean initialized = FALSE;
|
||||
|
||||
void
|
||||
g_i18n_init (void)
|
||||
{
|
||||
gchar *domain, *default_domain;
|
||||
gchar *domain, *default_domain, *locale;
|
||||
|
||||
setlocale (LC_ALL, "");
|
||||
initialized = TRUE;
|
||||
|
||||
locale = setlocale (LC_ALL, do_setlocale ? "" : NULL);
|
||||
domain = g_strdup (textdomain (NULL));
|
||||
default_domain = g_strdup (textdomain (""));
|
||||
textdomain (domain);
|
||||
|
||||
if (!strcmp (domain, default_domain))
|
||||
g_warning ("textdomain() must be called before glib i18n initialization");
|
||||
|
||||
g_free (domain);
|
||||
g_free (default_domain);
|
||||
|
||||
if (!*gettext (""))
|
||||
{
|
||||
g_should_translate = FALSE;
|
||||
g_warning ("textdomain() must be called before glib i18n initialization");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!*gettext ("") && (!locale || strcmp (locale, "C")))
|
||||
{
|
||||
should_translate = FALSE;
|
||||
g_warning ("No translation is available for the requested locale.");
|
||||
}
|
||||
|
||||
out:
|
||||
g_free (domain);
|
||||
g_free (default_domain);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_disable_setlocale:
|
||||
*
|
||||
* Prevents g_i18n_init() from automatically
|
||||
* calling <literal>setlocale (LC_ALL, "")</literal>. You would
|
||||
* want to use this function if you wanted to set the locale for
|
||||
* your program to something other than the user's locale, or if
|
||||
* you wanted to set different values for different locale categories.
|
||||
*
|
||||
* Most programs should not need to call this function.
|
||||
**/
|
||||
void
|
||||
g_disable_setlocale (void)
|
||||
{
|
||||
if (initialized)
|
||||
g_warning ("g_disable_setlocale() must be called before g_i18n_init()");
|
||||
|
||||
do_setlocale = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -73,10 +101,14 @@ g_i18n_init (void)
|
||||
const gchar *
|
||||
g_gettext (const gchar *msgid)
|
||||
{
|
||||
if (g_should_translate)
|
||||
return gettext (msgid);
|
||||
else
|
||||
if (!initialized)
|
||||
goto out;
|
||||
|
||||
if (!should_translate)
|
||||
return msgid;
|
||||
|
||||
out:
|
||||
return gettext (msgid);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,10 +131,14 @@ const gchar *
|
||||
g_dgettext (const gchar *domain,
|
||||
const gchar *msgid)
|
||||
{
|
||||
if (g_should_translate)
|
||||
return dgettext (domain, msgid);
|
||||
else
|
||||
if (!initialized)
|
||||
goto out;
|
||||
|
||||
if (!should_translate)
|
||||
return msgid;
|
||||
|
||||
out:
|
||||
return dgettext (domain, msgid);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,7 +42,8 @@ G_CONST_RETURN gchar *g_dpgettext (const gchar *domain,
|
||||
const gchar *msgctxtid,
|
||||
gsize msgidoffset);
|
||||
|
||||
void g_i18n_init (void);
|
||||
void g_i18n_init (void);
|
||||
void g_disable_setlocale (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -1585,6 +1585,7 @@ g_win32_locale_filename_from_utf8
|
||||
#if IN_HEADER(__G_I18N_H__)
|
||||
#if IN_FILE(__G_I18N_C__)
|
||||
g_i18n_init
|
||||
g_disable_setlocale
|
||||
g_gettext
|
||||
g_dgettext
|
||||
g_dpgettext
|
||||
|
Loading…
Reference in New Issue
Block a user