Django url 没有被翻译

mar*_*nuy 5 python django django-multilingual django-i18n

按照翻译 URL 模式,我可以使我的 URL 以活动语言为前缀,但无法翻译它们。

urls.py

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _

from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

from exercises.views import ExerciseListView

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]

urlpatterns += i18n_patterns(
   ...
   url(_(r'^exercises/$'), ExerciseListView.as_view(), name='list'),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

语言环境/es/LC_MESSAGES/django.po

#: myproject/urls.py:54
msgid "^exercises/$"
msgstr "^ejercicios/$"
Run Code Online (Sandbox Code Playgroud)

管理.py shell

>>> from django.core.urlresolvers import reverse
>>> from django.utils.translation import activate
>>> activate('en')
>>> reverse('list')
'/en/exercises/'
>>> activate('es')
>>> reverse('list')
'/es/exercises/'          <---- should be /es/ejercicios as translated in .po
Run Code Online (Sandbox Code Playgroud)

如何使reverse('list')显示'/es/ ejercicios /'

mar*_*nuy 3

问题不仅在于 URL,还在于消息文件中的所有翻译字符串都没有被翻译。

具有以下目录结构:

-Project  #base directory
  -apps
  -templates
  -project
     -settings.py
  -locale
     -es
       -LC_MESSAGES
          -django.po
Run Code Online (Sandbox Code Playgroud)

只需将LOCALE_PATHS配置添加到settings.py即可解决问题

LOCALE_PATHS = (
    'locale',
)
Run Code Online (Sandbox Code Playgroud)

Django 将在每个路径中查找包含实际翻译文件的 /LC_MESSAGES 目录。

*在 Django 1.8 中测试

  • 对于其他阅读本文并思考“不,这不可能,我在模板中看到一些翻译的字符串,所以显然所有内容都已配置?”的人 ... 不。你确实需要添加这个。即使您的部分翻译会显示出来。我希望两小时前我没有忽略这个答案。顺便说一句,Django 3.1。 (2认同)