我在部署到GAE的django-nonrel项目时遇到了问题。由于GAE,我必须将所有内容放入我的项目文件夹中,所以它看起来像这样
project
+ django
+ dbindexer
+ registration
+ myapp
...
+ locale
+ templates
我有templates
目录和myapp
目录中的字符串。
当我从项目目录运行python manage.py makemessages -l en --ignore django\*
时,它会爬过所有项目的目录,包括django,所以我得到了一个非常大的po文件。我从模板中找到了我的字符串,以及来自django目录的所有字符串。
在--ignore(或者只是-i)之后我尝试了pu django
django/*
,但没有任何改变。
有任何想法吗?
答案 0 :(得分:17)
./ manage.py help makemessages
-i PATTERN, --ignore=PATTERN
Ignore files or directories matching this glob-style
pattern. Use multiple times to ignore more.
我刚测试过,这个命令成功地忽略了我的应用程序:
./ manage.py makemessages -l da -i“django *”
但要注意,在测试之前,你应该删除旧的.po文件,因为我认为它不会自动删除你以前的makemessages执行中的翻译行。
答案 1 :(得分:2)
问题在于模式 - 也许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*'])
这可以节省您的输入,并为整个项目扫描消息提供了一个通用的入口点(您的翻译同事不会通过遗漏某些参数来破坏翻译)。
一旦您从完全不需要的邮件(即来自'django'目录的邮件)中清除了它,就不要删除旧的.po
文件。这允许gettext重新使用旧的未使用的消息(或类似的消息,将被标记为#, fuzzy
。
编辑 - 正如mt4x所说 - 上面的包装器不允许将选项传递给包装命令。这很容易解决:
from django.conf import settings
from django.core.management.base import BaseCommand
from django.core.management import call_command
from django.core.management.commands.makemessages import Command as MakeMessagesCommand
class Command(BaseCommand):
help = "Scan i18n messages without going into externals."
option_list = MakeMessagesCommand.option_list
def handle(self, *args, **options):
options['all'] = True
options['extensions'] = ['html', 'inc']
options['ignore_patterns'] = ['externals*']
call_command('makemessages', **options)
因此 - 您可以修复需要修复的内容,并对其余部分进行修改。 这不需要像上面那样盲目覆盖,而且还需要对传递给命令的参数进行一些条件编辑 - 将某些内容附加到列表中或仅在缺少时添加它。