Solve the msgctxt problem a bit more elegantly, and add some hints about

* gtk/gtkstock.c: Solve the msgctxt problem a bit more
        elegantly, and add some hints about this to the docs of
        gtk_stock_set_translate_func. Proposed by Christian Persch


svn path=/trunk/; revision=22137
This commit is contained in:
Matthias Clasen
2009-01-18 19:00:18 +00:00
parent 1a1331ee86
commit 4a949c0307
2 changed files with 46 additions and 23 deletions

View File

@ -1,3 +1,11 @@
2009-01-18 Matthias Clasen <mclasen@redhat.com>
Bug 563280 stock items & translation context
* gtk/gtkstock.c: Solve the msgctxt problem a bit more
elegantly, and add some hints about this to the docs of
gtk_stock_set_translate_func. Proposed by Christian Persch
2009-01-18 Matthias Clasen <mclasen@redhat.com> 2009-01-18 Matthias Clasen <mclasen@redhat.com>
Bug 568196 Please change context of Forward stock label Bug 568196 Please change context of Forward stock label

View File

@ -429,8 +429,36 @@ static const GtkStockItem builtin_items [] =
* If no function is registered for a translation domain, * If no function is registered for a translation domain,
* g_dgettext() is used. * g_dgettext() is used.
* *
* Since: 2.8 * The function is used for all stock items whose
* @translation_domain matches @domain. Note that it is possible
* to use strings different from the actual gettext translation domain
* of your application for this, as long as your #GtkTranslateFunc uses
* the correct domain when calling dgettext(). This can be useful, e.g.
* when dealing with message contexts:
* *
* |[
* GtkStockItem items[] = {
* { MY_ITEM1, NC_("odd items", "Item 1"), 0, 0, "odd-item-domain" },
* { MY_ITEM2, NC_("even items", "Item 2"), 0, 0, "even-item-domain" },
* };
*
* gchar *
* my_translate_func (const gchar *msgid,
* gpointer data)
* {
* gchar *msgctxt = data;
*
* return (gchar*)g_dpgettext2 (GETTEXT_PACKAGE, msgctxt, msgid);
* }
*
* /&ast; ... &ast/
*
* gtk_stock_add (items, G_N_ELEMENTS (items));
* gtk_stock_set_translate_func ("odd-item-domain", my_translate_func, "odd-item-domain");
* gtk_stock_set_translate_func ("even-item-domain", my_translate_func, "even-item-domain");
* ]|
*
* Since: 2.8
*/ */
void void
gtk_stock_set_translate_func (const gchar *domain, gtk_stock_set_translate_func (const gchar *domain,
@ -465,24 +493,11 @@ static gchar *
sgettext_swapped (const gchar *msgid, sgettext_swapped (const gchar *msgid,
gpointer data) gpointer data)
{ {
return (gchar *)g_dpgettext2 ((const char *)data, "Stock label", msgid); gchar *msgctxt = data;
}
static gchar * return (gchar *)g_dpgettext2 (GETTEXT_PACKAGE, msgctxt, msgid);
sgettext_swapped_navigation (const gchar *msgid,
gpointer data)
{
return (gchar *)g_dpgettext2 ((const char *)data, "Stock label, navigation", msgid);
} }
static gchar *
sgettext_swapped_media (const gchar *msgid,
gpointer data)
{
return (gchar *)g_dpgettext2 ((const char *)data, "Stock label, media", msgid);
}
static void static void
init_stock_hash (void) init_stock_hash (void)
{ {
@ -500,15 +515,15 @@ init_stock_hash (void)
gtk_stock_set_translate_func (GETTEXT_PACKAGE, gtk_stock_set_translate_func (GETTEXT_PACKAGE,
sgettext_swapped, sgettext_swapped,
GETTEXT_PACKAGE, "Stock label",
NULL); NULL);
gtk_stock_set_translate_func (GETTEXT_PACKAGE "-navigation", gtk_stock_set_translate_func (GETTEXT_PACKAGE "-navigation",
sgettext_swapped_navigation, sgettext_swapped,
GETTEXT_PACKAGE, "Stock label, navigation",
NULL); NULL);
gtk_stock_set_translate_func (GETTEXT_PACKAGE "-media", gtk_stock_set_translate_func (GETTEXT_PACKAGE "-media",
sgettext_swapped_media, sgettext_swapped,
GETTEXT_PACKAGE, "Stock label, media",
NULL); NULL);
} }
} }