mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +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:
		
				
					committed by
					
						
						Yair Hershkovitz
					
				
			
			
				
	
			
			
			
						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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user