【问题标题】:Django makemessage command not processing appDjango makemessage 命令未处理应用程序
【发布时间】:2016-01-30 20:43:45
【问题描述】:

我正在尝试使 django 应用程序国际化。我按照教程进行操作,但是当我运行时...

./manage.py makemessages --all

... django 只创建一个 .po 文件,其中包含我的 settings.py 的翻译(见下文)。它完全忽略了我的应用程序及其模板中的任何内容。

这是我的文件结构:

myproject
  |- myproject
      |- course
          |- templates
          |- static
          |- ...
          |- apps.py
          |- models.py
          |- views.py
          |- ...
      |- locale
      |- myproject
          |- settings.py
          |- ...
      |- manage.py

我的设置文件如下所示:

from django.utils.translation import ugettext_lazy as _

...

INSTALLED_APPS = [
     ...
     'course.apps.CourseConfig',
]

MIDDLEWARE_CLASSES = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': False,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'CET'
USE_I18N = True
USE_L10N = True
USE_TZ = True


LANGUAGES = [
    ('en', _('English')),
    ('kr', _('Korean')),
    ('cn', _('Chinese')),
    ('pt', _('Portuguese')),
]

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

我的模板包含翻译文本:

{% extends "course/base.html" %}

{% load i18n %}    
{% trans "Back to modules" %}
...

如果我运行“makemessages”命令,.po 文件中包含的唯一内容是 settings.py 文件中的语言名称,而不是模板变量或我在视图中使用 ugettext 翻译的任何内容。

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-30 20:25+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: myproject/settings.py:146
msgid "English"
msgstr ""

#: myproject/settings.py:147
msgid "Korean"
msgstr ""

#: myproject/settings.py:148
msgid "Chinese"
msgstr ""

#: myproject/settings.py:149
msgid "Portuguese"
msgstr ""

谁能告诉我我错过了什么?该应用程序运行良好,所有模板都在运行时找到。非常感谢。

【问题讨论】:

  • 模板的文件名是什么? makemessages 查找 *.py*.html*.txt。它应该在当前工作目录的所有子目录中搜索。
  • 如果文件显示为ls ./**/*.{html,txt,py}(假设你的shell是bash)你应该没问题。
  • 并确认安装了gettext,可以试试gettext -h
  • @HåkenLid:谢谢。已安装 gettext。模板文件扩展名为 *.html 但是,模板文件不显示为 ls ./**/*.{html,txt,py}。我在manage.py 的级别上运行它。它列出了myproject/myproject/coursemyproject/myproject/myproject 文件夹中的文件。由于模板位于 myproject/myproject/course/templates/course 中,因此它们不会出现。另外,我在myproject/myproject/course/views.py 中有翻译,当我运行makemessages 时不考虑这些翻译。和想法?我的文件夹结构错了吗?不过,我确实遵循了 django 教程。

标签: python django internationalization django-i18n


【解决方案1】:

我终于找到了“问题”。我不得不进入我的 django 应用程序course 的目录,然后再次从那里运行../manage.py makemessages -l en 等。然后,创建了文件,一切正常。 Django 文档并没有明确说明我必须 cd 进入我的每个应用程序。

【讨论】:

  • 您也可以运行django-admin makemessages ...,而不是在根文件夹中寻址manage.py
  • @Chris 你今天是我的英雄,谢谢。像魅力一样工作
猜你喜欢
  • 2021-02-10
  • 1970-01-01
  • 2021-11-24
  • 2018-09-03
  • 1970-01-01
  • 2014-04-08
  • 2016-06-12
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多