为什么django不考虑我的语言文件?

ldi*_*ual 6 django translation gettext internationalization

我遵循了关于文本翻译的整个文档,但是django没有考虑我的.mo文件.

一些事实:

  • 我在conf/locale/项目的根目录下创建了一个文件夹
  • django.po 是成功生成的 django-admin.py makemessages -l fr
  • django.mo 是成功生成的 django-admin.py compilemessages

所以我的文件夹结构是:

project/
  site/
  locale/
    fr/
      LC_MESSAGES/
        django.mo
        django.po
Run Code Online (Sandbox Code Playgroud)
  • settings.py,我已经设定LANGUAGE_CODE = 'fr'
  • 我的浏览器正确发送 Accept-Language:fr-FR,fr;
  • request.LANGUAGE_CODEfr从我的观点中显示

但是我没有得到任何翻译......如何让django考虑这些文件?


编辑

添加/home/www/project/localesettings.LOCALE_PATHS作品.但是,Django应该自己找到这条路径,我不喜欢使用绝对路径.这里发生了什么?

Der*_*wok 13

LOCALE_PATHS

Django默认在3个位置查找翻译文件:

  • LOCALE_PATHS/(language)/LC_MESSAGES/django.(po|mo)
  • $APPPATH/locale/(language)/LC_MESSAGES/django.(po|mo)
  • $PYTHONPATH/django/conf/locale/(language)/LC_MESSAGES/django.(po|mo)

如果您的翻译文件不在您的应用程序目录或PYTHON_PATH中,则只需要使用LOCALE_PATHS.

settings.py中LOCALE_PATHS的一个示例

LOCALE_PATHS = (
    '/home/www/project/conf/locale', # replace with correct path here
)
Run Code Online (Sandbox Code Playgroud)

MIDDLEWARE_CLASSES

添加django.middleware.locale.LocaleMiddlewareMIDDLEWARE_CLASSESsettings.py中

语言

LANGUAGES = (
    ('fr', 'Français'),
)
Run Code Online (Sandbox Code Playgroud)