1. Каталог может быть любой - путь к нему задаётся с помощью bindtextdomain. При сборке проекта с помощью autotools все нужные макросы будут определены автоматически и будет использована стандартная структура.
xgettext: xgettext не может работать, не зная искомых ключевых слов
Попробуйте `xgettext --help' для получения более подробного описания.
msgfmt: ошибка открытия файла "messages.po" для чтения: Нет такого файла или каталога
Ну слушайте, я могу почитать ман по xgettext и написать для вас ещё более подробное руководство или даже рабочее решение с одной лишь кнопкой, но это будет стоить денег, хотя бы на кофе.
P.S.: Между `-k` и ключевым словом не должно быть пробела.
Так вы файлик *.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
Ну вообще совершенно не обязательно именно туда. Путь должен соответствовать второму аргументу bindtextdomain(3) с добавлением "locale/LC_MESSAGES/domainname.mo" (где locale — имя локали, domainname — первый аргумент bindtextdomain(3)).
За следующий сеанс чтения манов, как и serzh-z, буду брать деньги.