i18n в Django 1.3 у меня не работает - PullRequest
1 голос
/ 27 мая 2011

Я использую Django 1.3.У меня есть чистый проект с:

settings.py

import os, sys

# absolute path to the project
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))

    # add to PYTHONPATH
    sys.path.append(os.path.join(PROJECT_ROOT, "apps"))

LANGUAGE_CODE = 'ru-ru'  


    USE_I18N = True    
    USE_L10N = True

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT,'templates'),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'i18n_app',
)

urls.py

urlpatterns = patterns('',
    url(r'^$', 'i18n_app.views.test'),
)

i18n_app / views.py

from django.shortcuts import render_to_response
from django.template import RequestContext

def test(request):

    return render_to_response('i18n_app/test.html', context_instance=RequestContext(request))

templates / i18n_app / test.html

{% load i18n %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
</head>
<body>
{% trans "String for trans" %}
<br>
<br>
<br>
{% blocktrans %}And one more{% endblocktrans %}
</body>
</html>

Из корня проекта я запускаю эту команду:

D:\Django\projects\testi18n>django-admin.py makemessages -l ru
processing language ru

Затем я заполняю файл django.po, который был создан после этой команды, и делаю:

D:\Django\projects\testi18n>django-admin.py compilemessages --traceback
processing file django.po in D:\Django\projects\testi18n\conf\locale\ru\LC_MESSAGES

Но все, что я вижу, это английские строки.Я нашел слишком много вопросов по этому поводу, но никто из них мне не помог.

Что я делаю не так?

Ответы [ 4 ]

5 голосов
/ 27 мая 2011

Добавьте к вашим настройкам:

ugettext = lambda s: s
LANGUAGES = (
    ('ru', ugettext('Russian')),
    ('en', ugettext('English')),
)

Создайте пустую папку с именем locale в каталоге ваших проектов

Затем из каталога ваших проектов запустите:

django-admin.py makemessages -l ru

Эта команда создаст файл .po внутри вашей папки locale. Откройте этот файл и заполните пустые поля msgstr "" требуемым переводом полей msgid, которые находятся выше.Здесь вы определяете перевод строк, помеченных для перевода в файле .html.

После написания перевода ваших строк выполните:

django-admin.py compilemessages
1 голос
/ 19 августа 2012

Тестовый сервер django нуждается в перезапуске, чтобы учесть изменения / появление файлов локали. В противном случае перевод не будет работать.

0 голосов
/ 05 мая 2014

Не забудьте установить LOCALE_PATHS для ваших локальных папок

0 голосов
/ 27 мая 2011

Похоже, что настройка LANGUAGES отсутствует в вашем файле settings.py. Попробуйте вставить что-то вроде этого:

ugettext = lambda s: s
LANGUAGES = (
    ('ru', ugettext('Russian')),
    ('en', ugettext('English')),
)

Кроме того, убедитесь, что django.core.context_processors.i18n находится в настройке MIDDLEWARE_CLASSES, иначе вы не сможете изменить язык. Подробнее см. документы .

Что я не понимаю - почему вы используете django-admin.py в каталоге вашего проекта? В основном вы должны использовать manage.py в каталоге вашего проекта.

./manage.py makemessages -l ru
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...