问题可能出在模式上 - 可能是shell为您进行了扩展。
总的来说,在模式中应该避免路径分隔符(无论是/还是\)。
如果你需要始终将特定选项传递给
makemessages
命令,可以考虑编写自己的包装器,就像我自己使用的这个示例一样:
from django.conf import settings
from django.core.management.base import BaseCommand
from django.core.management import call_command
class Command(BaseCommand):
help = "Scan i18n messages without going into externals."
def handle(self, *args, **options):
call_command('makemessages',
all=True,
extensions=['html', 'inc'],
ignore_patterns=['externals*'])
这样可以节省您的打字时间,并为项目提供一个通用的消息扫描入口(您的翻译同事不会因漏掉某些参数而破坏翻译)。
一旦您从完全不需要的消息中清除了旧的
.po
文件(即来自“django”目录的消息),请勿删除它。这允许gettext回收旧的未使用的消息,一旦它们再次被使用(或类似的消息,将被标记为
#,fuzzy
)。
编辑 - 如mt4x所指出的那样 - 上面的包装器不允许传递选项到包装的命令。这很容易修复:
from django.core.management import call_command
from django.core.management.commands.makemessages import (
Command as MakeMessagesCommand
)
class Command(MakeMessagesCommand):
help = "Scan i18n messages without going into externals."
def handle(self, *args, **options):
options['all'] = True
options['extensions'] = ['html', 'inc']
if 'ignore_patterns' not in options:
options['ignore_patterns'] = []
options['ignore_patterns'] += ['externals*']
call_command('makemessages', **options)
因此 - 你可以修复需要修复的问题,并灵活处理其余部分。
这不需要像上面那样盲目覆盖,而是对传递给命令的参数进行一些条件编辑 - 将某些内容添加到列表中或仅在缺少时添加它。
makemessages
选项,例如--domain
、--locale
和其他选项,除非创建更多的包装器或手动添加选项。我说得对吗? - m4tx--ignore=PATTERN
一样,可以指定多次使用多个不同的模式来忽略。 - Tomasz Gandor