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

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
This commit is contained in:
Yair Hershkovitz 2008-05-11 09:34:29 +00:00 committed by Yair Hershkovitz
parent e210eda09d
commit 7ab77ec9cd
9 changed files with 224 additions and 68 deletions

View File

@ -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

View 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 \

View File

@ -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)

167
glib/gi18n.c Normal file
View File

@ -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"

View File

@ -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__ */

View 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

View 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

View 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"

View 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