Django,国际化神秘不起作用

时间:2012-01-01 19:23:15

标签: django localization internationalization django-templates

在我的django项目中,我正在引入国际化。 我已经遵循了所有提示,特别是:

  • 在模板中插入trans语句,在模板顶部插入{% load i18n %}
  • 我已经运行django-admin.py makemessages -l it(来自项目的根目录)
  • 我已经设置了/locale/it/LC_MESSAGES/django.po的msgstr
  • 然后我跑了django-admin.py compilemessages (from root of project)

我的settings.py是:

  • LANGUAGE_CODE = 'en-us'
  • USE_I18N = True USE_L10N = True
  • TEMPLATE_CONTEXT_PROCESSOR = ('django.core.context_processors.i18n',)
  • MIDDLEWARE_CLASSES中的
  • "django.middleware.locale.LocaleMiddleware",

如果我在网络浏览器中使用DjDT调试django,我可以看到:

  • 接受 - 语言是'它'

但是我没有看到用它语言中的页面,而是继续用en-us语言看到。 我已经在stackoverflow上阅读了有关此主题的其他问题,但我没有找到解决方案。 我的应用程序需要做什么才能实现国际化?

编辑-1

我的项目结构如下:

  

的src /

     myproj/

          app1/

          app2/
     

区域设置/

    it/

        LC_MESSAGES/

                   django.mo

                   django.po

 it-IT/

        ...
     

模板/

3 个答案:

答案 0 :(得分:1)

您是否尝试将LANGUAGE_CODE设置为意大利语设置,然后看看会发生什么?

您是否尝试将LANGUAGES设置为英语和意大利语,看看会发生什么?对于波兰语和英语,我有这样的事情:LANGUAGES = (('pl', 'Polski'), ('en', 'English'))

最后一件事:你的观点是否使用RequestContext?

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))

您可以在渲染模板之前创建请求上下文并检查LANGUAGESLANGUAGE_CODE的值:

def some_view(request):
    # ...
    context = RequestContext(request)
    print context.LANGUAGE, context.LANGUAGE_CODE
    return render_to_response('my_template.html', my_data_dictionary, 
                              context_instance=context)

这样我们就可以看到它设定了什么价值。

我认为必须使用RequestContext,才能在模板中检测语言。

我记得设置这个的痛苦,我曾经试图在Django上运行Facebook应用程序。也许我能想出更多的东西。

答案 1 :(得分:1)

如果我将文件夹区域设置(在项目的根目录中)粘贴到myproj文件夹中,则国际化可以正常工作,也无需设置LOCALE_PATHS settings.py。

答案 2 :(得分:0)

听起来像Django找不到你的语言环境文件夹。请参阅此处的文档:https://docs.djangoproject.com/en/1.3/howto/i18n/

默认情况下,django会查看每个已安装的应用程序和项目的根目录(包含settings.py文件的文件夹 - 不一定是应用程序的根目录)