【问题标题】:Django makemessages not detecting translatable stringsDjango makemessages 未检测到可翻译的字符串
【发布时间】:2018-05-02 04:48:56
【问题描述】:

在“购买”应用中,有一个文件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 文件的 sn-p:

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')
    ...

有什么想法吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    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 行)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我刚刚在 'purchase' 应用程序中创建了语言环境目录,然后重新运行 .././manage.py makemessages -l cs_CZ -v 2。但结果是一样的。
      • 这是python 3吗?如果没有,您是否有从未来导入的unicode_literals
      • import as 似乎翻译不正确。我刚刚编辑了答案,为我的发现添加了更多细节。但总之,好像只能import as _
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多