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


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

Автор Тема: С++ Hello World с переводом  (Прочитано 1904 раз)

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

Оффлайн maximand

  • Автор темы
  • Активист
  • *
  • Сообщений: 307
    • Просмотр профиля
С++ Hello World с переводом
« : 24 Июля 2011, 13:41:27 »
FYI

http://oriya.sarovar.org/docs/gettext_single.html

О том как надо писать программы, чтобы затем переводить можно было на разные языки.

На примере простого кода

#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define _(STRING)    gettext(STRING)
int main(void)
{
setlocale(LC_ALL, "");
bindtextdomain( "hello", "/usr/share/locale" );
textdomain( "hello" );
printf( _( "Hello, world!\n" ) );
exit(0);
}
его можно собрать gcc hello.c -o hello и убедиться что работает ./hello
Далее xgettext -a --output=hello.pot hello.c
получаем hello.pot file 
msginit -l ru_RU -o hello.po -i hello.pot
получим hello.po переводим в poedit и в итоге будет нам hello.mo
sudo cp hello.mo /usr/share/locale/ru/LC_MESSAGES
запускаем снова ./hello
должно получиться Привет, мир!

PS Аналогичным образом мне удалось заставить заговорить по русски bash скрипт

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: С++ Hello World с переводом
« Ответ #1 : 24 Июля 2011, 14:41:31 »
HOW-TO?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн maximand

  • Автор темы
  • Активист
  • *
  • Сообщений: 307
    • Просмотр профиля
Re: С++ Hello World с переводом
« Ответ #2 : 24 Июля 2011, 15:08:41 »

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: С++ Hello World с переводом
« Ответ #3 : 24 Июля 2011, 15:43:34 »
Ну тогда:
https://help.ubuntu.ru/terms/%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_wiki

На форуме руководств не должно быть.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн amdlintuxos

  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Re: С++ Hello World с переводом
« Ответ #4 : 24 Июля 2011, 15:52:05 »
кросплатформеность саферс,  а так прикольно
что не збудется - позабудется

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: С++ Hello World с переводом
« Ответ #5 : 24 Июля 2011, 15:54:57 »
саферс?  ???

Для кросплатформы юзайте QTranslate.  ;)
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн maximand

  • Автор темы
  • Активист
  • *
  • Сообщений: 307
    • Просмотр профиля
Re: С++ Hello World с переводом
« Ответ #6 : 24 Июля 2011, 15:59:06 »
Ну тогда:
https://help.ubuntu.ru/terms/%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_wiki

На форуме руководств не должно быть.
Дык они же есть?! Я конечно правил не читаю... получается что вы мне предолагаете этот материал в вики разместить?
кросплатформеность саферс,  а так прикольно
Вот даз саферс мин? Т.е что такое саферс по русски?

« Последнее редактирование: 24 Июля 2011, 16:02:54 от maximand »

andrey_p

  • Гость
Re: С++ Hello World с переводом
« Ответ #7 : 24 Июля 2011, 16:15:09 »
Вот даз саферс мин? Т.е что такое саферс по русски?

 :D Совсем по русски? Млин забанят. Лучше по английски - suffer.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: С++ Hello World с переводом
« Ответ #8 : 24 Июля 2011, 16:34:54 »
Дык они же есть?! Я конечно правил не читаю... получается что вы мне предолагаете этот материал в вики разместить?
Да. На форуме только архив остался, который в скором времени исчезнет.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн maximand

  • Автор темы
  • Активист
  • *
  • Сообщений: 307
    • Просмотр профиля
Re: С++ Hello World с переводом
« Ответ #9 : 24 Июля 2011, 19:50:11 »
Приделал эту технологию к http://www.firssteps.ru/linux/
Работает (в данном примере поленился переводить всё)

#include <gtk/gtk.h>
#include <libintl.h>
#include <locale.h>
#define _(STRING)    gettext(STRING)

void hello( GtkWidget *widget,
gpointer data)
{
g_print (_("Hello, world!\n"));
// наглость написания по русски приветствия
// можно себе позволить только с нормально русифицированной консолью
}

gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
g_print ("delete event!!!!!!\n");
return (TRUE);
}

void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
// это для того, чтобы программу можно было закрыть с кнопки на окне
//
}

int main( int argc,
char *argv[] )
{
setlocale(LC_ALL, "");
bindtextdomain( "hello", "/usr/share/locale" );
textdomain( "hello" );

GtkWidget *window;
GtkWidget *button;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_signal_connect (GTK_OBJECT (window), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (destroy), NULL);

gtk_container_set_border_width (GTK_CONTAINER (window), 10);

button = gtk_button_new_with_label (_("Hello, world!"));

gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (hello), NULL);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (gtk_widget_destroy),
GTK_OBJECT (window));

gtk_container_add (GTK_CONTAINER (window), button);

gtk_widget_show (button);
gtk_widget_show (window);
gtk_main();
return 0;
}

 

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