/* In English, runs fine. In Spanish, crashes when the menu is accessed. */ #include "libintl.h" #include "locale.h" #define _(String) gettext (String) #define N_(String) String #include #define PACKAGE "test" #define LOCALEDIR "." void dummy_call (gpointer p, guint i, GtkWidget *w) { g_print("Got menu item\n"); } GtkItemFactoryEntry test_items[] = { { N_("/_File"), NULL, NULL, 0, "" }, { N_("/File/_Open data"), NULL, dummy_call, 0, "", GTK_STOCK_OPEN }, }; void app_exit (GtkWidget *w, gpointer p) { gtk_main_quit(); } gchar *menu_translate (const gchar *path, gpointer p) { return (_(path)); } GtkItemFactory *create_menu (void) { GtkItemFactory *ifac; int nitems = sizeof test_items / sizeof test_items[0]; ifac = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", NULL); gtk_item_factory_set_translate_func(ifac, menu_translate, NULL, NULL); gtk_item_factory_create_items(ifac, nitems, test_items, NULL); return ifac; } void nls_init (void) { setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); bind_textdomain_codeset (PACKAGE, "UTF-8"); } int main (int argc, char *argv[]) { GtkWidget *w, *mbar; GtkItemFactory *ifac; nls_init(); gtk_init(&argc, &argv); w = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(w), "destroy", G_CALLBACK(app_exit), NULL); ifac = create_menu(); mbar = gtk_item_factory_get_widget(ifac, "
"); gtk_widget_show(mbar); gtk_container_add(GTK_CONTAINER(w), mbar); gtk_widget_show(w); gtk_main(); return 0; }