To create a pot file: guile scripts/sexp-xgettext.scm -f po/POTFILES -o po/guix-website.pot --from-code=UTF-8 --copyright-holder="Ludovic Courtès" --package-name="guix-website" --msgid-bugs-address="ludo@gnu.org" --keyword=G_ --keyword=N_:1,2 --keyword=C_:1,2c To create a po file from a pot file, do the usual: cd po msginit -l de --no-translator To merge an existing po file with a new pot file: cd po msgmerge -U de.po guix-website.pot To update mo files: mkdir -p de/LC_MESSAGES cd po msgfmt de.po cd .. mv po/messages.mo de/LC_MESSAGES/guix-website.mo To test: guix environment --ad-hoc haunt GUILE_LOAD_PATH=$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH GUIX_WEB_SITE_LOCAL=yes haunt build GUILE_LOAD_PATH=$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH haunt serve