$ cat myapp.scm (use free-gettext) (textdomain "myapp") (define gt (make-gettext "myapp")) (print (gt 'locale)) (print (gt 'domain)) (set! gettext (gt 'getter)) (print (gettext "hello world")) $ cat locale/pt_BR/LC_MESSAGES/myapp.po #: my-app.scm:11 msgid "hello world" msgstr "Olá mundo" $ LANG=pt_BR GETTEXT_PATH=locale csi -s myapp.scm (pt_BR) (myapp) Olá mundo ;;; So far so good, but with the compiled .mo file: $ msgfmt locale/pt_BR/LC_MESSAGES/myapp.po -o locale/pt_BR/LC_MESSAGES/myapp.mo $ mv locale/pt_BR/LC_MESSAGES/myapp.po locale/pt_BR/LC_MESSAGES/myapp._ $ LANG=pt_BR GETTEXT_PATH=locale csi -s myapp.scm Warning: lookup-mo-message: (string-length) bad argument type: #f Warning: lookup-mo-message: (string-length) bad argument type: #f (pt_BR) (myapp) Warning: lookup-mo-message: (string-length) bad argument type: #f hello world