Ok I have been searching like crazy for this I think simple problem.
I use Django 1.4
The problem is that django won\'t translate a simple {% trans \"work\"
In Django 1.4 the locale directory at project root is not longer supported. You should add it to LOCALE_PATHS
setting, which is empty by default. Django Settings.
However the management commands involved in locale generation, seems to work, so I don't know if you already did it.
I had the same situation. Part of phrases were translation but most of them just showed the key. We have two main languages en and fa. Both had the same problem. I reviewed all the same problems and every single document online about the django translations. I can say I tried almost everything. The only difference was we were testing on the production server. And I didn't reload the server! So this one-line command took me out of my misery:
sudo /etc/init.d/uwsgi reload
what I was doing wrong was I restarted wsgi instead of uwsgi!
If you like to do what I did, here it is: I do the steps in this order on server:
django-admin makemessages -l en
django-admin makemessages -l fa
add Persian phrases and some english text to test.
django-admin compilemessages
python manage.py clear_cache
python manage.py runserver
Server runs with no errors. But non of the changes in en or fa take place. It looks that django is loading from old cache. So, I deleted the whole cache, and even deleted all the files from server and installed the whole project again. Yet the same issue.
I made messages from my django on my laptop and sent it to server. Also, I tried different text editors and translation tools such as poedit to generate po and mo files. Yet the problem keeps showing.
I used and replaced trans tags to see if it works in any of them:
{% trans ' ' %}
{% trans " " %}
{% blocktrans %} {% endblocktrans %}
{% trans "xyz" az XYZ %} {{ XYZ }}
{{ _() }}
none of them worked!
But reloading the server put everything in order. I hope it might be helpful for some one.
I just spent few hours trying to fix this issue in Django 1.5 while working on my new project Sportolio and it turned out I was missing a comma at the end of LOCALE_PATH
LOCALE_PATHS = (
'/path/to/my/project/locale/',
)
This is very crucial, as Django expects LOCALE_PATHS to be a TUPLE not a String.
I hope it save someone's life :)
The position you key the command matter.
In my case, this is my project structure:
myproject/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
apps/
migrations/
__init__.py
admin.py
models.py
tests.py
views.py
If I call makemessages
at mysite folder, like this:
D:\...\myproject\mysite> python ../manage.py makemessages -all
it will not get the string in HTML {% trans "str" %}
.
But if I call makemessages at myproject folder, like this:
D:\...\myproject> python manage.py makemessages -all
it works! It finds all {% trans "str" %}
in HTML.
So be careful about the location you are.