mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-30 04:13:06 +02: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>
|
2008-05-16 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
* config.h.win32.in: Update to match the configure-produced one.
|
* 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 <string.h>
|
||||||
#include <locale.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
|
void
|
||||||
g_i18n_init (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));
|
domain = g_strdup (textdomain (NULL));
|
||||||
default_domain = g_strdup (textdomain (""));
|
default_domain = g_strdup (textdomain (""));
|
||||||
textdomain (domain);
|
textdomain (domain);
|
||||||
|
|
||||||
if (!strcmp (domain, default_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.");
|
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 *
|
const gchar *
|
||||||
g_gettext (const gchar *msgid)
|
g_gettext (const gchar *msgid)
|
||||||
{
|
{
|
||||||
if (g_should_translate)
|
if (!initialized)
|
||||||
return gettext (msgid);
|
goto out;
|
||||||
else
|
|
||||||
|
if (!should_translate)
|
||||||
return msgid;
|
return msgid;
|
||||||
|
|
||||||
|
out:
|
||||||
|
return gettext (msgid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,10 +131,14 @@ const gchar *
|
|||||||
g_dgettext (const gchar *domain,
|
g_dgettext (const gchar *domain,
|
||||||
const gchar *msgid)
|
const gchar *msgid)
|
||||||
{
|
{
|
||||||
if (g_should_translate)
|
if (!initialized)
|
||||||
return dgettext (domain, msgid);
|
goto out;
|
||||||
else
|
|
||||||
|
if (!should_translate)
|
||||||
return msgid;
|
return msgid;
|
||||||
|
|
||||||
|
out:
|
||||||
|
return dgettext (domain, msgid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,8 @@ G_CONST_RETURN gchar *g_dpgettext (const gchar *domain,
|
|||||||
const gchar *msgctxtid,
|
const gchar *msgctxtid,
|
||||||
gsize msgidoffset);
|
gsize msgidoffset);
|
||||||
|
|
||||||
void g_i18n_init (void);
|
void g_i18n_init (void);
|
||||||
|
void g_disable_setlocale (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -1585,6 +1585,7 @@ g_win32_locale_filename_from_utf8
|
|||||||
#if IN_HEADER(__G_I18N_H__)
|
#if IN_HEADER(__G_I18N_H__)
|
||||||
#if IN_FILE(__G_I18N_C__)
|
#if IN_FILE(__G_I18N_C__)
|
||||||
g_i18n_init
|
g_i18n_init
|
||||||
|
g_disable_setlocale
|
||||||
g_gettext
|
g_gettext
|
||||||
g_dgettext
|
g_dgettext
|
||||||
g_dpgettext
|
g_dpgettext
|
||||||
|
Loading…
x
Reference in New Issue
Block a user