Django模糊字符串翻译未显示出来。

32
  1. 为什么有时候我在django.po语言文件中会得到一个fuzzy的项目。实际上,在我的项目中,fuzzy字符串项目是完全独特的。

#: .\users\views.py:81 .\users\views.py:101
#, fuzzy
msgid "username or email"
msgstr "9988"
  • 模糊匹配没问题,但我的模糊匹配结果在页面上没有显示出来,只有英文版本显示出来。这真的很奇怪。

  • 3个回答

    43

    1. msgmerge会将旧的目录中与当前字符串的msgid相似的字符串标记为fuzzy。它还会将旧目录中标记为模糊的字符串传递到新目录中。

    2. msgfmt从编译的目录中排除模糊的消息,因为这些翻译很可能是不正确的。翻译人员应检查翻译的正确性(在您发布的情况下,空字符串显然是错误的翻译),并在验证翻译后删除fuzzy标记。如果您绝对想使用模糊翻译,请向msgfmt传递--use-fuzzy参数:

    python manage.py compilemessages --use-fuzzy
    

    谢谢,实际上我在真正的翻译中加入了一些内容,说msgid“用户名或电子邮件”,msgstr为“9988”,并使用“django-admin.py compilemessages”命令进行编译,似乎没有--use-fuzzy参数可以传递。 - icn
    compilemessages 只是为所有找到的 po 文件调用 msgmft --check-format -o foo.mo foo.po。最好直接使用 msgfmt。 - Martin v. Löwis
    1
    重要的是要强调,当您检查模糊翻译是否正确时,应该移除模糊标志。否则,它们将在正常的“编译消息”调用中被跳过。 - kiril

    7
    我也遇到了这些问题,通过使用“po编辑器”(例如poedit),我解决了所有的问题。它可以突出显示模糊和未翻译的条目,并且使翻译过程更加快速。
    您还可以使用Django Rosetta来将翻译过程集成到您的Django环境中。

    4
    非常感谢@Martin v. Löwis的第一个答案。

    是的,那个方法非常有效。在我的情况下,使用--use-fuzzy开关非常有用。

    在我的情况下,.po文件中的行内容(无法工作)如下所示。 所有翻译好的行都能正常工作,除了这一行。

    #: ui/templates/theme/html/ltr/vertical-menu-template-nav-dark/login.html:58
    #, fuzzy
    #| msgid "Already a registered user (Login)"
    msgid "Not a registered user (Create account)"
    msgstr "Уже зарегистрированный пользователь (логин)"
    

    执行django-admin compilemessages --use-fuzzy后,这是我的终端输出结果。

    (venv3.6.7) Rishikeshs-MacBook-Air:src hygull$ django-admin compilemessages --use-fuzzy
    processing file django.po in /Users/hygull/Projects/Python36/Django/Others/AMCProj/amc/src/locale/hi/LC_MESSAGES
    processing file django.po in /Users/hygull/Projects/Python36/Django/Others/AMCProj/amc/src/locale/ru/LC_MESSAGES
    processing file django.po in /Users/hygull/Projects/Python36/Django/Others/AMCProj/amc/src/locale/en/LC_MESSAGES
    

    最后,在运行命令后,只需重新启动服务器即可,即python manage.py runserver


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接