Разбор Д/З
Общие замечания:
- Не существует идеального решения — хотя бы потому, что формулировка задания допускает различные варианты, вплоть до применения различных инструментариев
- ⇒ Разбор делится на пять частей:
- Условие, при котором задача засчитывается
- Если это условие не выполнено, баллы за неё обнуляются
- Компоненты автоматической проверки (обязательные)
- Неуспешная проверка по каждому пункту снижает оценку
- Обязательная составляющая решения
- Отсутствие или претензии по каждому пункту снижает оценку
- Необязательная (бонусная) составляющая решения
- Наличие по каждому пункту повышает оценку
- Варианты ошибок
- Наличие по каждому пункту снижает оценку
- Условие, при котором задача засчитывается
- Полная проверка решения возможна только вручную
Максимальная оценка должна быть хорошо достижима в ситуации, когда
- автоматическая проверка пройдена,
все обязательные составляющие присутствуют без особых претензий,
необязательные составляющие могут отсутствовать,
- ошибок нет.
Задание по лекции 08_I18n
Далее рассматривается решение в варианте, когда
используются Autotools (а не CMake / Meson)
для сборки перевода используются средства Autotools (а не вручную)
guesser ├── 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"