代码之家  ›  专栏  ›  技术社区  ›  Vadorequest

Django uggetext作为“breaks”而不是“breakes”生成消息

  •  0
  • Vadorequest  · 技术社区  · 6 年前

    我刚遇到一只奇怪的虫子(?)我最初在那里

    from django.utils.translation import ugettext as _
    

    我换了衣服

    from django.utils.translation import ugettext as __
    

    但令人惊讶的是 ./manage.py makemessages --all 在完成了所有的翻译后,他们基本上都会在我的 .po 文件,好像它们不再被识别为翻译。

    回到 _ 和跑步 makemessages 修复它。我不太明白为什么变量的名称很重要,我想知道当我同时需要ugettext和ugettext-lazy时,为了保持一致性,应该如何命名它们。

    Django 1.8和python 2.7.14

    1 回复  |  直到 6 年前
        1
  •  2
  •   nik_m    6 年前

    那是因为 gettext 效用,更具体地说 xgettext 命令。

    简而言之,为了将字符串标记为可翻译的,必须 以特定的关键字(即 translate("hello world") , translate 这是关键字)。这个 xgettext公司 程序适用于多种编程语言。每种语言都有自己的语言 predefined keywords (记者 Ctrl + f 寻找 --keyword ).

    在Python中,这些关键字是(注意 _ 最后):

    对于Python: 获取文本 , ugettext , dgettext:2 , ngettext:1,2 , ungettext:1,2 , dngettext:2,3 , _

    xgettext公司 命令有几个选项可以改变其行为。其中之一,是 --关键字 选择。当您调用 xgettext公司 使用命令 --关键字 选项,则如果python文件中的所有字符串都包装在预定义的关键字或 --关键字 你给的选择。例如,如果 xgettext --keyword=jimmy_hendrix 所有的弦 jimmy_hendrix("hello world") 将包含在 .po 文件。

    但是,您永远不会在Django中显式地运行这个命令。你用的是 makemessages 命令。看着 source of makemessages command ,可以看到Django提供了 --关键字 用于标记字符串以便翻译。事实上,这些关键字与Django用于翻译的附加函数相同。

    经过这些,我想现在很清楚了 __ ___ 不会起作用的,因为它不在Django的名单上 xgettext公司 命令调用,在 xgettext公司 命令。

    你可能会看到一个过时的, but still valid answer .

    还有,一个例子 xgettext on MDN, using PHP .