【问题标题】:Django, internationalization mysteriously not workingDjango,国际化神秘地不起作用
【发布时间】:2025-12-05 23:30:02
【问题描述】:

在我的 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',)
  • "django.middleware.locale.LocaleMiddleware", 在 MIDDLEWARE_CLASSES

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

  • 接受语言是“它”

但是,我继续以 en-us 语言查看页面,而不是使用它的语言查看页面。 我已经在 * 上阅读了有关此主题的其他问题,但我没有找到解决方案。 我的应用需要什么才能进行国际化?

编辑-1

我的项目结构如下:

src/

     myproj/

          app1/

          app2/

语言环境/

    it/

        LC_MESSAGES/

                   django.mo

                   django.po

 it-IT/

        ...

模板/

【问题讨论】:

    标签: django localization internationalization django-templates


    【解决方案1】:

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

    【讨论】:

    • 是的,因为 myproject 中的语言环境是翻译的默认位置。但是,如果您将其放在外面并正确设置 LOCALE_PATHS,它也应该可以工作。我很高兴你设法让它工作:)
    • @gruszczy 我也是,总的来说,在这个问题上经过了太多时间。你有博客吗?或其他页面?
    【解决方案2】:

    您是否尝试过将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 应用程序打开它。也许我可以想出更多的东西。

    【讨论】:

    • 是的,如果我设置LANGUAGE_CODE='it' 什么都不会发生。结果是一样的:我看到的是英文页面。
    • 我在 setting.py 中添加了这个:LANGUAGES = (('it', 'Italian'), ('en', 'English')) 但没有任何反应,该页面使用的是英文
    • 你是在Google App Engine里面使用纯django还是django
    • 纯 django。在本地主机上 - linux
    • 所以我知道语言环境不必在myproj 中。但是,你有没有正确设置LOCALE_PATHSdocs.djangoproject.com/en/dev/ref/settings/#locale-paths)?
    【解决方案3】:

    听起来 Django 没有找到您的语言环境文件夹。在此处查看文档:https://docs.djangoproject.com/en/1.3/howto/i18n/

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

    【讨论】: