【问题标题】:i18n in Django 1.3 doesn't work for meDjango 1.3 中的 i18n 对我不起作用
【发布时间】:2011-05-27 10:22:31
【问题描述】:

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

但我看到的都是英文字符串。 我发现了太多关于此的问题,但没有一个对我没有帮助。

我做错了什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    添加到您的设置:

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

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

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

    django-admin.py makemessages -l ru
    

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

    写完你的字符串翻译后运行:

    django-admin.py compilemessages
    

    【讨论】:

    • 是的,你是对的。我在我的项目目录 config/locale 中创建了它,但它不起作用。但是目录语言环境很好
    【解决方案2】:

    django 的测试服务器需要重新启动以考虑语言环境文件的更改/幻影。否则无法翻译。

    【讨论】:

      【解决方案3】:

      您的 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
      

      【讨论】:

      • 如果您有其他问题,可以编辑您的原始帖子。这不是答案。
      【解决方案4】:

      不要忘记将LOCALE_PATHS 设置为您的语言环境文件夹

      【讨论】:

        猜你喜欢
        • 2012-06-29
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多