В Linux можно каталог не указывать, а файлы класть в стандартный каталог (типа /usr/share/locale). Лучше вместо main называть файл названием программы.
Однако если задача поддерживать разные языки на лету, лучше использовать class based API. Примерно так:
lang_tr = {}
for lang in ['ru','en','es']:
lang_tr[lang] = gettext.translation('domain', 'каталог', [lang])
lang_tr['ru'].gettext('Message')
lang_tr['en'].gettext('Message')
lang_tr['es'].gettext('Message')
Можно также делать от нужной трансляции install, тогда _ будет работать с выбранным языком до следующего переключения, но это может быть не всегда удобно, например, если бот асинхронный, то начнутся проблемы.
Если что, я gettext в Python не использовал, только в C и очень давно. Кстати, не знаю что такое poedit, .po в .mo всегда компилировали утилитой msgfmt.