Я могу ошибаться, но:
.pot - читаемый человеком шаблонный файл gettext - это то, что вы дадите переводчику (человеку?).
.po - переведенный человеком текстовый файл gettext на основе POT - это то, что переводчик возвращает вам.
.mo - машиночитаемый код (байт-код?) Для использования PHP при выполнении реального перевода. Этот формат - то, что вы бы передали в php. Это общий формат, понятный большинству программ, но он может не поддерживать все функции getnxt gnu. Это где ГМО приходит на место.
.gmo - файлы, оканчивающиеся на .gmo, действительно являются файлами MO, когда известно, что эти файлы используют формат GNU.
Вы можете использовать poedit для обработки .pot -> .po -> .mo
подробнее
P.S. при этом - только программисты будут называть такие форматы, как PO или XML, удобочитаемыми.
Кроме того - вам, вероятно, не нужно конвертировать .mo в .po ... ну ... По крайней мере, для меня это не похоже на обычный сценарий:)