簡體   English   中英

Django無法正確翻譯網站

[英]Django not translating the site properly

在花費了很多時間之后,StackOverflow可以進行救援。

我將settings.py配置如下:

...
TIME_ZONE = 'Europe/Berlin'

LANGUAGE_CODE = 'de'

LANGUAGES = (
  ('en', u'English'),
  ('de', u'German'),
  ('fr', u'French'),
)

USE_I18N = True

USE_L10N = True

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

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
)
...

在我的base.html文件中,我具有如下形式:

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

我的urls.py

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^$', 'MainApp.views.index'), #root
)

在同一個base.html文件中,我的頂部為{% load i18n %} ,正文中的示例為{% trans "This is the title." %} {% trans "This is the title." %} 在運行服務器之前,我做了以下操作:

django-admin.py makemessages -l de
django-admin.py makemessages -l fr

上面的示例文本由makemessages拾取,我為msgstr提供了相應的翻譯。 在那之后,我做了django-admin.py compilemessages. 該命令運行良好,並在相應的語言環境文件夾中生成了.mo文件。

我運行服務器,該表格不起作用。 在另一個StackOverflow帖子中,提示我刪除#, fuzzy lines ,我這樣做了。 我究竟做錯了什么?

謝謝!

您應該在MIDDLEWARE_CLASSES中將LocaleMiddleware放在SessionMiddleware之后:

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
....
)

中間件類的順序很重要。 LocaleMiddleware使用會話數據來檢測用戶語言,因此它必須位於SessionMiddleware 此處的文檔中也提到了它https://docs.djangoproject.com/en/1.3/topics/i18n/deployment/#how-django-discovers-language-preference

希望這對您有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM