Django's makemessages sucks for my use cases
Yet another angry rant, caused, of course, by using Django in anger. Nothing wrong with using something in anger, that's the real way I learn something. Zope 3 even has an online book on how to use it in anger.
That said, Django's makemessages administrative command sucks by being way too inflexible to anything but the ideal Django development environment. My environment looks like this: I have a project based on Pinax, which I'm developing and deploying using zc.buildout. My source code sits in src, where I have several packages. I also have a "localsettings.py" module located in the root of the buildout, because I don't want to have it inside the src folder. Pinax is located in parts/Pinax, and it's actually a git checkout, based on my own fork of Pinax. Pinax doesn't have translations at the moment (I think I saw a ticket in its tracker about reintroducing a translation package), so I'm on my own here with regards to translation.
With this setup, it is close to impossible for me to generate anything useful without a lot of hacking and swearing. Makemessages insists on being run from inside a Django project, and when I did that, it complains about missing localsettings module. Pointing the root of the buildout as pythonpath didn't do anything. A good thing that I have already extracted messages from the templates, before switching to the buildout project structure.
Some solutions that I have found:
- I can extract messages from the Pinax python modules using this homegrown script:
PYFILES=/tmp/pyfiles PINAX=parts/Pinax/pinax/ BASE=/home/tibi/work/ProjectBuildout/src/project/locale/ro/LC_MESSAGES/ POTFILE_PYTHON=$BASE/python.pot POTFILE_TEMPLATES=$BASE/templates.pot POTFILE=$BASE/django.pot POFILE=$BASE/django.po #extract messages from python code find $PINAX | grep ".*py$" > /tmp/pyfiles touch $POTFILE_PYTHON xgettext -j -L python -d django -f $PYFILES -o $POTFILE_PYTHON #merge the templates + python messages into one pot file msgcat -o $POTFILE $POTFILE_TEMPLATES $POTFILE_PYTHON #merge the potfile with the po file msgmerge -U -N $POFILE $POTFILE
- I have copied all the templates from pinax and its associated applications inside a template folder in my project. Now I can generate the po file, from my src/project folder, with
../../bin/py ./../../manage.py makemessages -e .py -e .html -l ro
Of course, I can't run this over the other apps and packages in my src/ folder to extract messages from the python modules, so I am forced to adjust the first script to take those folders into consideration.