The following commands are for creating German translations; for translations into other languages the locale (e.g. "de") has to be changed.
It is assumed that the po folder is placed inside the source folder.

During development:

find -name "*.c" | xargs xgettext --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 --from-code=UTF-8 --language=C --add-comments --sort-output -o po/pot/kickshaw.pot -
msginit --input=po/pot/kickshaw.pot --locale=de --output=po/de.po

Update:

find -name "*.c" | xargs xgettext --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 --from-code=UTF-8 --language=C --add-comments --sort-output -o po/pot/kickshaw.pot -
msgmerge --update po/de.po po/pot/kickshaw.pot
msgfmt --output-file=resources/txts/translations/de/LC_MESSAGES/kickshaw.mo po/de.po
sudo msgfmt --output-file=/usr/share/locale/de/LC_MESSAGES/kickshaw.mo po/de.po (for testing)

There is a shell script update_all_mo.sh to update all translations at once into resources/txts/translations/

Before the release of a new version, the finalized mo files have to be copied to resources/txts/translations/de/LC_MESSAGES.
