glib r6882 - in trunk: . glib



Author: yairhr
Date: Sun May 11 09:34:29 2008
New Revision: 6882
URL: http://svn.gnome.org/viewvc/glib?rev=6882&view=rev

Log:
2008-05-11  Yair Hershkovitz  <yairhr gmail com>

        Bug 503071 - Application direction changes to right to left even if
        theres no translation. 

        * glib/gi18n.c: g_i18n_init() for initializing the glib i18n,
        checking if a translation is available for the calling app. wrappers for
        gettext, dgettext and dpgettext to check first if the application
        should be translated.

        * glib/gi18n.h: symbol declaration for gettext wrappers.

        * glib/gi18n-lib.h: include gi18n.h instead of libintl.h.

        * glib/gstrfuncs.c: moved g_dpgettext() to glib/gi18n.c.

        * glib/gutils.c: use g_dgettext() instead of dgettext().

        * glib/glibintl.h: include gi18n.h.

        * glib.symbols: added gettext wrappers.

        * glib/Makefile.am: added gi18n.c.



Added:
   trunk/glib/gi18n.c
Modified:
   trunk/ChangeLog
   trunk/glib/Makefile.am
   trunk/glib/gi18n-lib.h
   trunk/glib/gi18n.h
   trunk/glib/glib.symbols
   trunk/glib/glibintl.h
   trunk/glib/gstrfuncs.c
   trunk/glib/gutils.c

Modified: trunk/glib/Makefile.am
==============================================================================
--- trunk/glib/Makefile.am	(original)
+++ trunk/glib/Makefile.am	Sun May 11 09:34:29 2008
@@ -164,7 +164,8 @@
 	gutils.c		\
 	gdebug.h		\
 	gprintf.c		\
-	gprintfint.h
+	gprintfint.h		\
+	gi18n.c
 
 EXTRA_libglib_2_0_la_SOURCES = \
 	giounix.c	\

Modified: trunk/glib/gi18n-lib.h
==============================================================================
--- trunk/glib/gi18n-lib.h	(original)
+++ trunk/glib/gi18n-lib.h	Sun May 11 09:34:29 2008
@@ -21,14 +21,13 @@
 #define __G_I18N_LIB_H__
 
 #include <glib.h>
-
-#include <libintl.h>
+#include <glib/gi18n.h>
 
 #ifndef GETTEXT_PACKAGE
 #error You must define GETTEXT_PACKAGE before including gi18n-lib.h.
 #endif
 
-#define  _(String) dgettext (GETTEXT_PACKAGE, String)
+#define  _(String) g_dgettext (GETTEXT_PACKAGE, String)
 #define Q_(String) g_dpgettext (GETTEXT_PACKAGE, String, 0)
 #define N_(String) (String)
 #define C_(Context,String) g_dpgettext (GETTEXT_PACKAGE, Context "\004" String, strlen (Context) + 1)

Added: trunk/glib/gi18n.c
==============================================================================
--- (empty file)
+++ trunk/glib/gi18n.c	Sun May 11 09:34:29 2008
@@ -0,0 +1,167 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1998  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "gi18n.h"
+#include "galias.h"
+#include "gmessages.h"
+#include "galloca.h"
+#include "string.h"
+
+static gboolean g_should_translate = TRUE;
+
+void
+g_i18n_init (void)
+{
+  gchar *domain, *default_domain;
+
+  setlocale(LC_ALL, "");
+  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 ("No translation is available for the requested locale.");
+    }
+}
+
+/**
+ * g_gettext:
+ * @msgid: message to translate
+ *
+ * This function is a wrapper of gettext() which does not not translate
+ * the message if the application who initialized glib i18n is not translated.
+ *
+ * Applications should normally not use this function directly,
+ * but use the _() macro for translations.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.16
+ */
+const gchar *
+g_gettext (const gchar *msgid)
+{
+  if (g_should_translate)
+    return gettext (msgid);
+  else
+    return msgid;
+}
+
+/**
+ * g_dgettext:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @msgid: message to translate
+ *
+ * This function is a wrapper of dgettext() which does not not translate
+ * the message if the application who initialized glib i18n is not translated.
+ *
+ * Applications should normally not use this function directly,
+ * but use the _() macro for translations.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.16
+ */
+const gchar *
+g_dgettext (const gchar *domain,
+            const gchar *msgid)
+{
+  if (g_should_translate)
+    return dgettext (domain, msgid);
+  else
+    return msgid;
+}
+
+/**
+ * g_dpgettext:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @msgctxtid: a combined message context and message id, separated
+ *   by a \004 character
+ * @msgidoffset: the offset of the message id in @msgctxid
+ *
+ * This function is a variant of dgettext() which supports
+ * a disambiguating message context. GNU gettext uses the
+ * '\004' character to separate the message context and
+ * message id in @msgctxtid.
+ * If 0 is passed as @msgidoffset, this function will fall back to
+ * trying to use the deprecated convention of using "|" as a separation
+ * character.
+ *
+ * Applications should normally not use this function directly,
+ * but use the C_() macro for translations with context.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.16
+ */
+const gchar *
+g_dpgettext (const gchar *domain, 
+             const gchar *msgctxtid, 
+             gsize        msgidoffset)
+{
+  const gchar *translation;
+  gchar *sep;
+
+  translation = g_dgettext (domain, msgctxtid);
+
+  if (translation == msgctxtid)
+    {
+      if (msgidoffset > 0)
+        return msgctxtid + msgidoffset;
+
+      sep = strchr (msgctxtid, '|');
+ 
+      if (sep)
+        {
+          /* try with '\004' instead of '|', in case
+           * xgettext -kQ_:1g was used
+           */
+          gchar *tmp = g_alloca (strlen (msgctxtid) + 1);
+          strcpy (tmp, msgctxtid);
+          tmp[sep - msgctxtid] = '\004';
+
+          translation = g_dgettext (domain, tmp);
+   
+          if (translation == tmp)
+            return sep + 1; 
+        }
+    }
+
+  return translation;
+}
+
+#define __G_I18N_C__
+#include "galiasdef.c"

Modified: trunk/glib/gi18n.h
==============================================================================
--- trunk/glib/gi18n.h	(original)
+++ trunk/glib/gi18n.h	Sun May 11 09:34:29 2008
@@ -24,9 +24,26 @@
 
 #include <libintl.h>
 
-#define  _(String) gettext (String)
+#if !defined(__G_I18N_LIB_H__) && !defined(__GLIBINTL_H__)
+#define  _(String) g_gettext (String)
 #define Q_(String) g_dpgettext (NULL, String, 0)
 #define N_(String) (String)
 #define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1)
+#endif
+
+G_BEGIN_DECLS
+
+G_CONST_RETURN gchar *g_gettext        (const gchar *msgid);
+
+G_CONST_RETURN gchar *g_dgettext       (const gchar *domain,
+                                        const gchar *msgid);
+
+G_CONST_RETURN gchar *g_dpgettext      (const gchar *domain,
+                                        const gchar *msgctxtid,
+                                        gsize        msgidoffset);
+
+void		      g_i18n_init      (void);
+
+G_END_DECLS
 
 #endif  /* __G_I18N_H__ */

Modified: trunk/glib/glib.symbols
==============================================================================
--- trunk/glib/glib.symbols	(original)
+++ trunk/glib/glib.symbols	Sun May 11 09:34:29 2008
@@ -1146,7 +1146,6 @@
 #endif
 g_strv_length
 g_strip_context
-g_dpgettext
 #endif
 #endif
 
@@ -1583,6 +1582,14 @@
 #endif
 #endif
 
+#if IN_HEADER(__G_I18N_H__)
+#if IN_FILE(__G_I18N_C__)
+g_gettext
+g_dgettext
+g_dpgettext
+#endif
+#endif
+
 #ifdef INCLUDE_VARIABLES
 g_ascii_table
 g_utf8_skip

Modified: trunk/glib/glibintl.h
==============================================================================
--- trunk/glib/glibintl.h	(original)
+++ trunk/glib/glibintl.h	Sun May 11 09:34:29 2008
@@ -1,6 +1,8 @@
 #ifndef __GLIBINTL_H__
 #define __GLIBINTL_H__
 
+#include <glib/gi18n.h>
+
 #ifndef SIZEOF_CHAR
 #error "config.h must be included prior to glibintl.h"
 #endif

Modified: trunk/glib/gstrfuncs.c
==============================================================================
--- trunk/glib/gstrfuncs.c	(original)
+++ trunk/glib/gstrfuncs.c	Sun May 11 09:34:29 2008
@@ -2844,66 +2844,5 @@
   return i;
 }
 
-
-/**
- * g_dpgettext:
- * @domain: the translation domain to use, or %NULL to use
- *   the domain set with textdomain()
- * @msgctxtid: a combined message context and message id, separated
- *   by a \004 character
- * @msgidoffset: the offset of the message id in @msgctxid
- *
- * This function is a variant of dgettext() which supports
- * a disambiguating message context. GNU gettext uses the
- * '\004' character to separate the message context and
- * message id in @msgctxtid.
- * If 0 is passed as @msgidoffset, this function will fall back to
- * trying to use the deprecated convention of using "|" as a separation
- * character.
- *
- * Applications should normally not use this function directly,
- * but use the C_() macro for translations with context.
- *
- * Returns: The translated string
- *
- * Since: 2.16
- */
-const gchar *
-g_dpgettext (const gchar *domain, 
-             const gchar *msgctxtid, 
-             gsize        msgidoffset)
-{
-  const gchar *translation;
-  gchar *sep;
-
-  translation = dgettext (domain, msgctxtid);
-
-  if (translation == msgctxtid)
-    {
-      if (msgidoffset > 0)
-        return msgctxtid + msgidoffset;
-
-      sep = strchr (msgctxtid, '|');
- 
-      if (sep)
-        {
-          /* try with '\004' instead of '|', in case
-           * xgettext -kQ_:1g was used
-           */
-          gchar *tmp = g_alloca (strlen (msgctxtid) + 1);
-          strcpy (tmp, msgctxtid);
-          tmp[sep - msgctxtid] = '\004';
-
-          translation = dgettext (domain, tmp);
-   
-          if (translation == tmp)
-            return sep + 1; 
-        }
-    }
-
-  return translation;
-}
-
-
 #define __G_STRFUNCS_C__
 #include "galiasdef.c"

Modified: trunk/glib/gutils.c
==============================================================================
--- trunk/glib/gutils.c	(original)
+++ trunk/glib/gutils.c	Sun May 11 09:34:29 2008
@@ -3237,7 +3237,7 @@
       _glib_gettext_initialized = TRUE;
     }
   
-  return dgettext (GETTEXT_PACKAGE, str);
+  return g_dgettext (GETTEXT_PACKAGE, str);
 }
 
 #ifdef G_OS_WIN32



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]