如何正确设置Django翻译?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我有一个问题,翻译不工作Django 1.6!我在我的设置中添加了

LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('de', ugettext('German')),
)

还增加了中间件:

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',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

以及我的*.py文件,每当我使用字符串时,该字符串应为110:

from django.utils.translation import ugettext_lazy as _

我的模板以

{% extends "base.html" %}
{% load i18n %}

而在模板内部,我使用的是反式占位符。例如:

<h1>{% trans "Register a tank" %}</h1>

实际上,字符串出现在locale/de/lc中。_消息/django.po在运行时,我已经翻译了它们。例如:

msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"

我错了什么?

我目前正在讨论的项目是在GitHub上托管的:https://github.com/frlan/blankpoint

提问于
用户回答回答于

添加LOCALE_PATHSsettings.py把它设为:

请注意LOCALE_PATHS必须是元组(请看路径末尾的逗号)

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

现在基于LOCALE_PATHSlocale文件夹应该位于项目的根目录中。

确保你能django-admin.py makemessages -l dedjango-admin.py compilemessagesCMDS从你的项目的根。

djPrj
  |
  +---> djPrj
  |
  +---> djApp
  |
  +---> locale
  |
  +---> templates

也重新安排了你的MIDDLEWARE_CLASSES成为LocaleMiddlewareSessionMiddleware在此之前CommonMiddleware:

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',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

重新启动服务(python manage.py runserver)然后再检查一遍。


只是为了确保本地化应用于默认的Django管理页面django.moDjango文件,执行以下测试:

第一,主要urls.py工程更换patterns带着i18n_patterns:

from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
    url(r'^admin/', include(admin.site.urls)),
    # ...
)

现在去Adminde前缀,例如:http://127.0.0.1:8000/de/admin/Admin页应显示在German语言。

好吧,你能看到AdminDjango页de语言?

还检查你的观点de前缀也是。


根据你的代码工程项目,有些句子没有反式分词。把它们放在:

{% trans "your sentence" %}

而且你必须使用ugettext_lazy与视图和模型的代码中的ugettext不同,

将其替换为:

from django.utils.translation import ugettext as _ 

有:

from django.utils.translation import ugettext_lazy as _

现在一切都会正常的。

用户回答回答于

在我的例子中,我使用了en-gb作为运行参数。

django-admin.py makemessages -l en-gb

相反,应该是en_GB。

django-admin.py makemessages -l en_GB

扫码关注云+社区