Answer a question

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 my template.

This is what I have done:

Settings.py:

LANGUAGE_CODE = 'en-us'
USE_I18N = True
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.request",
)

LOCALE_PATHS = (
    '/home/m00p/PycharmProjects/astrid/locale'
)

this is my map structure:

/
myproject/
apps/
locale/
template/

So I runned

django-admin.py makemessages -l nl -i settings.py

and it did succesfully created in the locale folder nl/LC_MESSAGES/django.po, I then edit the translation It found in the django.po

#: templates/base.html:22
msgid "work"
msgstr "ddddddddddddd"

I then run the compile command

django-admin.py compilemessages

and it also succesfully created a django.mo file in the correct folder

I added this also in the myproject/urls.py

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'^$', 'front.views.home', name='home'),
)

I added this in the base.html file to be able to change the language

<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="/" />
    <select name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

So when I go to the website I get 127.0.0.1:8000/en/ in the url, this is correct because englisch is the default language, when I then change it with the form to NL, It redirects to 127.0.0.1:8000/nl/ but the text I translated didn't change. I'm also sure that the language is NL because when I display {{ LANGUAGE_CODE }} it says NL.

Anybody know why it doesn't change?

Thanks m00p

PROBLEM SOLVED

During the process when I was adding things I forgot for it to work, I restarted my deployment server, but I didn't cleared the cache of my browser it was still using the old pages, so when I cleared my browser data in Chrome and revisited the page and changed the language it translated it correctly. Thanks for the suggestions anyway!

Answers

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.

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐