Django 1.3中的i18n对我不起作用

时间:2011-05-27 10:22:32

标签: django

我使用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))

模板/ 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 个答案:

答案 0 :(得分:5)

添加到您的设置:

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

在项目目录中创建一个名为locale的空文件夹

然后从您的项目目录运行:

django-admin.py makemessages -l ru

此命令将在locale文件夹中创建一个.po文件。打开该文件,并在空msgstr ""个字段中填入所需的msgid字段翻译位置。 您可以在此处定义.html文件中标记为要翻译的字符串的翻译。

编写完字符串的翻译后:

django-admin.py compilemessages

答案 1 :(得分:1)

django的测试服务器需要重新启动才能获取帐户区域设置文件的更改/显示。否则翻译不会起作用。

答案 2 :(得分:0)

看起来您的settings.py中缺少LANGUAGES设置。尝试加入类似的东西:

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

此外,请确保'django.core.context_processors.i18n'位于MIDDLEWARE_CLASSES设置中,否则您将无法更改语言。有关详细信息,请参阅docs

我不明白 - 为什么在项目目录中使用django-admin.py?基本上你应该在项目目录中使用manage.py。

./manage.py makemessages -l ru

答案 3 :(得分:0)

不要忘记将LOCALE_PATHS设置为您的区域设置文件夹