Задание по лекции 08_I18n
(Общие замечания см. тут)
Далее рассматривается решение в варианте, когда
используются Autotools (а не CMake / Meson)
для сборки перевода используются средства Autotools (а не вручную)
08_I18n ├── configure.ac ├── Makefile.am ├── po │ ├── Makevars │ ├── POTFILES.in │ └── ru.po └── src ├── guesser.c └── Makefile.am
Условие сдачи
- Есть способ добиться запуска программы, при котором можно наблюдать (хотя бы на некоторых сообщениях) как исходный текст, так и его перевод в зависимости от локали
Компоненты автоматической проверки
В репозитории есть все файлы: configure.ac, Makefile.am, po/*.po, po/POTFILES.in, po/Makevars
В файле configure.ac используются макросы AM_GNU_GETTEXT и ALL_LINGUAS
Все подстроки #include <libintl.h>, #include <locale.h>, setlocale, textdomain и gettext можно найти в файлах **/*.[ch]
В репозитории нет общих генератов (*.o, *.a, *.so и других файлов формата ELF)
В репозитории нет PO-генератов (*.pot, *.mo, *.gmo)
Обязательная составляющая
Сборка autoreconf -fisv && ./configure && make
Сборка и установка ./configure --prefix=/tmp/QQ && make clean install
Запуск после установки: /tmp/QQ/bin/имя_программы
- переводы могут не работать
Существует способ запуска, при котором переводы работают
- Обрабатываются ситуации неправильного ввода
- Обрабатывается ситуация закрытия ввода
Необязательная составляющая
- Обработка ошибок вызываемых функций, если они могут завершиться с ошибками
- В этом задании допустимо такую обработку не делать
Дополнительная настройка configure.ac / configure, позволяющая указать при сборке каталог с переводами (и тестировать запуск без установки)
- Программа угадывает число не более, чем за 7 вопросов
Варианты ошибок
В репозитории хранятся генераты autopoint (фактически — что угодно из каталога po, кроме файла с переводами, Makevars и POTFILES.in)
├── configure.ac ├── Makefile.am ├── po │ ├── Makevars │ ├── Makevars.template │ ├── POTFILES.in │ ├── ru.mo │ └── ru.po └── src ├── guesser.c └── Makefile.am
- Какая-то часть вывода не переведена (например, сообщения об ошибках)
$ echo "Wat" | ~/tmp/QQ/bin/guesser Выберите число из диапазона от 1 до 100. Задуманное число больше 50 (Да/Нет)? /home/george/tmp/QQ/bin/guesser: Incorrent answer 'Wat'
Каталог с переводами явно указан в тексте программы (а не определяется autotools)
… bindtextdomain(PACKAGE, "po"); …
В этом примере явно задан каталог "po"