Освоение утилиты gettext с нуля

Здесь можно поговорить о чём угодно и сколько угодно.

Модератор: Модераторы разделов

Аватара пользователя
ArkanJR
Сообщения: 1175
Статус: Профан

Освоение утилиты gettext с нуля

Сообщение ArkanJR »

Имеется ли самоучитель по сабжу на русском языке, желательно с несложными примерами?

Под несложным примером подразумевается примерно следующее, имеется код, вроде такого:

Код: Выделить всё

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}
Далее на пальцах следует описание русификации данной программы с помощью gettext.
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Освоение утилиты gettext с нуля

Сообщение serzh-z »

bormant
ArkanJR писал: ↑
23.10.2018 17:08
на русском языке
http://coddism.com/php/perevod_sajta_s_pomocshju_gettext - для C++ нужно добавить:

Код: Выделить всё

#include <libintl.h>
#define _(String) gettext (String)
В остальном разницы нет.
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1175
Статус: Профан

Re: Освоение утилиты gettext с нуля

Сообщение ArkanJR »

serzh-z писал: ↑
23.10.2018 18:18
http://coddism.com/php/perevod_sajta_s_pomocshju_gettext - для C++ нужно добавить:

Код: Выделить всё

#include <libintl.h>
#define _(String) gettext (String)
В остальном разницы нет.
Хотелось бы некоторых уточнений:

1). Каталог с переводами (langs) размещать в каталоге с исходником?

2). Файлы *.po и *.mo нужно создавать для каждого переводимого слова?
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Освоение утилиты gettext с нуля

Сообщение serzh-z »

1. Каталог может быть любой - путь к нему задаётся с помощью bindtextdomain. При сборке проекта с помощью autotools все нужные макросы будут определены автоматически и будет использована стандартная структура.

2. xgettext все само создаст.
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1175
Статус: Профан

Re: Освоение утилиты gettext с нуля

Сообщение ArkanJR »

Так, если нетрудно, можно дальше объяснить на пальцах? Преобразовал код в такой вид:

Код: Выделить всё

#include <iostream>
#include <libintl.h>
#define _(String) gettext (String)

using namespace std;

int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}
Какое следующее действие?
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Освоение утилиты gettext с нуля

Сообщение serzh-z »

ArkanJR

Код: Выделить всё

setlocale (LC_ALL, "");
bindtextdomain ("myprog", "каталог с локалями");
textdomain ("myprog");

cout << _("Hello, world!") << endl;



Shell


xgettext -k _ -C myprog.cpp
msgfmt --output-file="каталог с локалями"/myprog/en/myprog.mo messages.po
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1175
Статус: Профан

Re: Освоение утилиты gettext с нуля

Сообщение ArkanJR »

Попробовал:

Код: Выделить всё

xgettext -k _ -C hello.cpp
msgfmt --output-file=langs/hello/en/hello.mo messages.po
, получил в итоге:
xgettext: xgettext не может работать, не зная искомых ключевых слов
Попробуйте `xgettext --help' для получения более подробного описания.
msgfmt: ошибка открытия файла "messages.po" для чтения: Нет такого файла или каталога
Не смотря на
serzh-z писал: ↑
27.10.2018 16:16
2. xgettext все само создаст.
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Освоение утилиты gettext с нуля

Сообщение serzh-z »

ArkanJR писал: ↑
03.11.2018 12:42
Не смотря на
Ну слушайте, я могу почитать ман по xgettext и написать для вас ещё более подробное руководство или даже рабочее решение с одной лишь кнопкой, но это будет стоить денег, хотя бы на кофе.

P.S.: Между `-k` и ключевым словом не должно быть пробела.
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1175
Статус: Профан

Re: Освоение утилиты gettext с нуля

Сообщение ArkanJR »

Итак, после гугления получил-таки соответствующие файлы *.po и *.mo. Но что делать дальше? Ради интереса попробовал просто скомпилировать hello.cpp:

Код: Выделить всё

g++ hello.cpp -o hello
При запуске получившегося бинарника выдаётся приветствие на английском.
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Освоение утилиты gettext с нуля

Сообщение bormant »

Так вы файлик *.mo в подкаталог LC_MESSAGES локали в /usr/share/locale не положили, вот и результат.
Если запустите strace -e open ./hello в локали ru_RU.utf8, увидите обращения в
/usr/share/locale/ru_RU.utf8/LC_MESSAGES/hello.mo
/usr/share/locale/ru_RU/LC_MESSAGES/hello.mo
/usr/share/locale/ru/LC_MESSAGES/hello.mo
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21552
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Освоение утилиты gettext с нуля

Сообщение Bizdelnick »

bormant писал(а): ↑
06.11.2018 16:13
в /usr/share/locale
Ну вообще совершенно не обязательно именно туда. Путь должен соответствовать второму аргументу bindtextdomain(3) с добавлением "locale/LC_MESSAGES/domainname.mo" (где locale — имя локали, domainname — первый аргумент bindtextdomain(3)).
За следующий сеанс чтения манов, как и serzh-z, буду брать деньги.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: