mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Bug 536996 – Missing noop i18n macro equivalent to C_
* glib/glib.symbols: * glib/gstrfuncs.[hc]: Add g_dpgettext2() which is a variant of g_dpgettext() taking context and id as separate arguments. * glib/gi18n-lib.h: * glib/gi18n.h: Add an NC_() macro that is to C_() as N_() is to _(). svn path=/trunk/; revision=7202
This commit is contained in:
parent
adae2cf59b
commit
e417f54c28
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
||||
2008-07-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Bug 536996 – Missing noop i18n macro equivalent to C_
|
||||
|
||||
* glib/glib.symbols:
|
||||
* glib/gstrfuncs.[hc]: Add g_dpgettext2() which is a
|
||||
variant of g_dpgettext() taking context and id as separate
|
||||
arguments.
|
||||
|
||||
* glib/gi18n-lib.h:
|
||||
* glib/gi18n.h: Add an NC_() macro that is to C_() as N_()
|
||||
is to _().
|
||||
|
||||
2008-07-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* tests/Makefile.am:
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-07-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* glib/glib-sections.txt:
|
||||
* glib/tmpl/i18n.sgml: Add new gettext stuff
|
||||
|
||||
2008-07-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Bug 530759 – update the gobject tutorial to the XXI century
|
||||
|
@ -2503,9 +2503,11 @@ g_unichar_to_utf8
|
||||
Q_
|
||||
C_
|
||||
N_
|
||||
NC_
|
||||
g_dgettext
|
||||
g_dngettext
|
||||
g_dpgettext
|
||||
g_dpgettext2
|
||||
g_strip_context
|
||||
<SUBSECTION>
|
||||
g_get_language_names
|
||||
|
@ -148,6 +148,41 @@ To get the translated string, call gettext() at runtime.
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### MACRO NC_ ##### -->
|
||||
<para>
|
||||
Only marks a string for translation, with context.
|
||||
This is useful in situations where the translated strings can't
|
||||
be directly used, e.g. in string array initializers.
|
||||
To get the translated string, you should call g_dpgettext2() at runtime.
|
||||
</para>
|
||||
|[
|
||||
{
|
||||
static const char *messages[] = {
|
||||
NC_("some context", "some very meaningful message"),
|
||||
NC_("some context", "and another one")
|
||||
};
|
||||
const char *string;
|
||||
...
|
||||
string
|
||||
= index > 1 ? g_dpgettext2 (NULL, "some context", "a default message") : g_dpgettext2 (NULL, "some context", messages[index]);
|
||||
<!-- -->
|
||||
fputs (string);
|
||||
...
|
||||
}
|
||||
]|
|
||||
|
||||
<note><para>
|
||||
If you are using the NC_() macro, you need to make sure that you
|
||||
pass <option>--keyword=NC_:1c,2</option> to xgettext when extracting
|
||||
messages. Note that this only works with GNU gettext >= 0.15.
|
||||
</para></note>
|
||||
|
||||
|
||||
@Context: a message context, must be a string literal
|
||||
@String: a message id, must be a string literal
|
||||
@Since: 2.18
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_strip_context ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -32,5 +32,6 @@
|
||||
#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)
|
||||
#define NC_(Context, String) (String)
|
||||
|
||||
#endif /* __G_I18N_LIB_H__ */
|
||||
|
@ -28,5 +28,6 @@
|
||||
#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)
|
||||
#define NC_(Context, String) (String)
|
||||
|
||||
#endif /* __G_I18N_H__ */
|
||||
|
@ -1154,6 +1154,7 @@ g_strip_context G_GNUC_FORMAT(1)
|
||||
g_dgettext G_GNUC_FORMAT(2)
|
||||
g_dngettext G_GNUC_FORMAT(3)
|
||||
g_dpgettext G_GNUC_FORMAT(2)
|
||||
g_dpgettext2 G_GNUC_FORMAT(3)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -2909,6 +2909,62 @@ g_dpgettext (const gchar *domain,
|
||||
return translation;
|
||||
}
|
||||
|
||||
/* This function is taken from gettext.h
|
||||
* GNU gettext uses '\004' to separate context and msgid in .mo files.
|
||||
*/
|
||||
/**
|
||||
* g_dpgettext2:
|
||||
* @domain: the translation domain to use, or %NULL to use
|
||||
* the domain set with textdomain()
|
||||
* @context: the message context
|
||||
* @msgid: the message
|
||||
*
|
||||
* This function is a variant of g_dgettext() which supports
|
||||
* a disambiguating message context. GNU gettext uses the
|
||||
* '\004' character to separate the message context and
|
||||
* message id in @msgctxtid.
|
||||
*
|
||||
* This uses g_dgettext() internally. See that functions for differences
|
||||
* with dgettext() proper.
|
||||
*
|
||||
* This function differs from C_() in that it is not a macro and
|
||||
* thus you may use non-string-literals as context and msgid arguments.
|
||||
*
|
||||
* Returns: The translated string
|
||||
*
|
||||
* Since: 2.18
|
||||
*/
|
||||
G_CONST_RETURN char *
|
||||
g_dpgettext2 (const char *domain,
|
||||
const char *msgctxt,
|
||||
const char *msgid)
|
||||
{
|
||||
size_t msgctxt_len = strlen (msgctxt) + 1;
|
||||
size_t msgid_len = strlen (msgid) + 1;
|
||||
const char *translation;
|
||||
char* msg_ctxt_id;
|
||||
|
||||
msg_ctxt_id = g_alloca (msgctxt_len + msgid_len);
|
||||
|
||||
memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
|
||||
msg_ctxt_id[msgctxt_len - 1] = '\004';
|
||||
memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
|
||||
|
||||
translation = g_dgettext (domain, msg_ctxt_id);
|
||||
|
||||
if (translation == msg_ctxt_id)
|
||||
{
|
||||
/* try the old way of doing message contexts, too */
|
||||
msg_ctxt_id[msgctxt_len - 1] = '|';
|
||||
translation = g_dgettext (domain, msg_ctxt_id);
|
||||
|
||||
if (translation == msg_ctxt_id)
|
||||
return msgid;
|
||||
}
|
||||
|
||||
return translation;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_g_dgettext_should_translate (void)
|
||||
{
|
||||
|
@ -257,6 +257,9 @@ G_CONST_RETURN gchar *g_dngettext (const gchar *domain,
|
||||
G_CONST_RETURN gchar *g_dpgettext (const gchar *domain,
|
||||
const gchar *msgctxtid,
|
||||
gsize msgidoffset) G_GNUC_FORMAT(2);
|
||||
G_CONST_RETURN gchar *g_dpgettext2 (const gchar *domain,
|
||||
const gchar *context,
|
||||
const gchar *msgid) G_GNUC_FORMAT(3);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user