Bug 503071 - Application direction changes to right to left even if theres
authorYair Hershkovitz <yairhr@gmail.com>
Sun, 11 May 2008 09:34:29 +0000 (09:34 +0000)
committerYair Hershkovitz <yairhr@src.gnome.org>
Sun, 11 May 2008 09:34:29 +0000 (09:34 +0000)
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.

svn path=/trunk/; revision=6882

ChangeLog
glib/Makefile.am
glib/gi18n-lib.h
glib/gi18n.c [new file with mode: 0644]
glib/gi18n.h
glib/glib.symbols
glib/glibintl.h
glib/gstrfuncs.c
glib/gutils.c

index 3bc224e..364c56a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+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.
+
 2008-05-05  Michael Natterer  <mitch@imendio.com>
 
        * glib/glib.h: #define __GLIB_H_INSIDE__ around including
index b92777b..2e8b706 100644 (file)
@@ -164,7 +164,8 @@ libglib_2_0_la_SOURCES =    \
        gutils.c                \
        gdebug.h                \
        gprintf.c               \
-       gprintfint.h
+       gprintfint.h            \
+       gi18n.c
 
 EXTRA_libglib_2_0_la_SOURCES = \
        giounix.c       \
index 0d67017..c5e03bd 100644 (file)
 #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)
diff --git a/glib/gi18n.c b/glib/gi18n.c
new file mode 100644 (file)
index 0000000..0d185ed
--- /dev/null
@@ -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"
index 011b52f..17f06f9 100644 (file)
 
 #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__ */
index d9b6611..33e2fa1 100644 (file)
@@ -1146,7 +1146,6 @@ g_strdown
 #endif
 g_strv_length
 g_strip_context
-g_dpgettext
 #endif
 #endif
 
@@ -1583,6 +1582,14 @@ g_win32_locale_filename_from_utf8
 #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
index 4bed7c1..d902be3 100644 (file)
@@ -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
index 74419d9..e2b6167 100644 (file)
@@ -2844,66 +2844,5 @@ g_strv_length (gchar **str_array)
   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"
index 03a8227..be1714a 100644 (file)
@@ -3237,7 +3237,7 @@ glib_gettext (const gchar *str)
       _glib_gettext_initialized = TRUE;
     }
   
-  return dgettext (GETTEXT_PACKAGE, str);
+  return g_dgettext (GETTEXT_PACKAGE, str);
 }
 
 #ifdef G_OS_WIN32