Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Программирование в Gnome/Gtk - кракозябры в меню программы.  (Прочитано 2379 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн den1024

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Приветствую Всех.

 В общем после компиляции приложения в котором только главное окно и меню (причём пункты меню на английском) - текст в меню отображается кракозябрами. Код программы прилагаю.
 Подскажите, пожалуйста, как это исправить?

#include <gnome.h>

static void shutdown();
static void showhelp();
gint eventDelete(GtkWidget *widget,GdkEvent *event,gpointer data);
gint eventDestroy(GtkWidget *widget,GdkEvent *event,gpointer data);

GnomeUIInfo fileMenu[] = {
{ GNOME_APP_UI_ITEM,
N_("Exit"),N_("Close all files and exit"),
shutdown,NULL,NULL,
GNOME_APP_PIXMAP_STOCK,GNOME_STOCK_MENU_ABOUT,
0,0,NULL
},
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_END
};

GnomeUIInfo helpMenu[] = {
{ GNOME_APP_UI_ITEM,
N_("Help"),N_("Display help information"),
showhelp,NULL,NULL,
GNOME_APP_PIXMAP_STOCK,GNOME_STOCK_MENU_ABOUT,
0,0,NULL
},
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_END
};

GnomeUIInfo mainMenu[] = {
GNOMEUIINFO_SUBTREE(N_("File"),fileMenu),
GNOMEUIINFO_SUBTREE(N_("Help"),helpMenu),
GNOMEUIINFO_END
};

int main(int argc,char *argv[])
{
GtkWidget *appWindow;

gnome_init("gnomebase","1.0",argc,argv);
appWindow = gnome_app_new("gnomebase","Gnome Base");

gtk_widget_show(appWindow);

gnome_app_create_menus(GNOME_APP(appWindow),mainMenu);

gtk_signal_connect(GTK_OBJECT(appWindow),"delete_event",GTK_SIGNAL_FUNC(eventDelete),NULL);
gtk_signal_connect(GTK_OBJECT(appWindow),"destroy",GTK_SIGNAL_FUNC(eventDestroy),NULL);

gtk_main();
exit(0);
}

void showhelp()
{
g_print("Show the help window\n");
}

gint eventDelete(GtkWidget *widget,GdkEvent *event,gpointer data)
{
return(FALSE);
}

gint eventDestroy(GtkWidget *widget,GdkEvent *event,gpointer data)
{
shutdown();
return(0);
}

void shutdown()
{
gtk_main_quit();
}

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Если запустить из терминала?

А если предварительно там же в терминале локаль выставить в C?

Оффлайн den1024

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Компилирую в терминале, а кракозябры всегда - что из терминала запускать, что через обозреватель Гнома.

Собственно по вызову в терминале команды locale получаем следующее:

LANG=ru_UA.UTF-8
LC_CTYPE="ru_UA.UTF-8"
LC_NUMERIC="ru_UA.UTF-8"
LC_TIME="ru_UA.UTF-8"
LC_COLLATE="ru_UA.UTF-8"
LC_MONETARY="ru_UA.UTF-8"
LC_MESSAGES="ru_UA.UTF-8"
LC_PAPER="ru_UA.UTF-8"
LC_NAME="ru_UA.UTF-8"
LC_ADDRESS="ru_UA.UTF-8"
LC_TELEPHONE="ru_UA.UTF-8"
LC_MEASUREMENT="ru_UA.UTF-8"
LC_IDENTIFICATION="ru_UA.UTF-8"
LC_ALL=


Нужно что-то изменить? И как это сделать?

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
В терминале:
LANG=С
program

Оффлайн den1024

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Благодарю помогло - но частично.  :-[

Главное меню теперь отображается нормальным текстом, а вот все подменю - также кракозябрами :(

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Хм. Насколько я понял из беглого просмотра документации http://developer.gnome.org/doc/GGAD/ggad.html , в частности раздела http://developer.gnome.org/doc/GGAD/sec-i18n.html ты типа подготовил строки к интернационализации через gettext, но никаких механизмов, связанных с этим, не используешь, в частности вызовов bindetextdomain и textdomain в твоей программе не наблюдается. Может тогда вообще убрать использование макросов _() и N_() ?

Оффлайн den1024

  • Автор темы
  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Спасибо! Помогло.

До локализации я пока ещё не добрался. Пока так тренируюсь. :)

 

Страница сгенерирована за 0.019 секунд. Запросов: 22.