Django makemessages没有检测到可翻译的字符串

时间:2017-11-18 14:20:16

标签: python django

在应用'购买'中,有一个文件reports.py。在这个应用程序中,我正在生成一些pdf报告,有时我想翻译成捷克语。不幸的是,makemessages脚本没有检测到可翻译的字符串。

运行以下内容表明正在处理reports.py。但是没有添加任何文件。

.././manage.py makemessages -l cs_CZ -v 2
processing file reports.py in .
processing locale cs_CZ

这是来自reports.py文件的片段:

from django.utils.translation import ugettext as trans

def purchase_order_report(purchase_order, language='en'):
    ...
    doc.add_text(trans('Items requested'), 'Heading2')
    ...

Locale文件夹的设置如下:

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

编辑: 似乎django makemessages没有正确翻译导入。

运行以下工作(但在将变量解压缩到_时可能会发生冲突):

from django.utils.translation import ugettext as _

def purchase_order_report(purchase_order, language='en'):
    ...
    doc.add_text(_('Items requested'), 'Heading2')
    ...

运行以下作品(但如果你想混合和匹配ugettext和ugettext_lazy,则不是很方便):

from django.utils.translation import ugettext

def purchase_order_report(purchase_order, language='en'):
    ...
    doc.add_text(ugettext('Items requested'), 'Heading2')
    ...

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

应用应该拥有自己的locale目录。但如果它不存在,它就不会被创建。在应用程序中创建目录,然后它应该可以工作。

答案 1 :(得分:0)

xgettext GNU命令接受--keyword=KEYWORD选项以检测附加关键字。

我在shell中尝试了以下命令,结果与预期的一样:

xgettext -o - --from-code=UTF-8 -L Python -d django -ktrans reports.py

可悲的是,似乎还没有任何方法可以通过makemessages Django(2.1)命令传递此选项:'(
关键字被硬编码在django/core/management/commands/makemessage.py文件中(第570行)。