Python Django makemessages正在将翻译的字符串标记为fuzzy

Python Django makemessages正在将翻译的字符串标记为fuzzy,python,django,internationalization,translation,Python,Django,Internationalization,Translation,我对Django makemessages管理命令有问题。似乎是在.po文件中将消息随机标记为模糊消息,即使它们已被翻译。例如 #: templates/profile/edit.html:21 msgid "Save Changes" msgstr "Save Changes DE" 会变成 #: templates/profile/edit.html:21 #, fuzzy, msgid "Save Changes" msgstr "Save Changes DE" 这种行为非常断断续续

我对Django makemessages管理命令有问题。似乎是在.po文件中将消息随机标记为模糊消息,即使它们已被翻译。例如

#: templates/profile/edit.html:21
msgid "Save Changes"
msgstr "Save Changes DE"
会变成

#: templates/profile/edit.html:21
#, fuzzy,
msgid "Save Changes"
msgstr "Save Changes DE"
这种行为非常断断续续,很难重现,因此调试并不简单


有人有什么想法吗?

我猜字符串中有一些变化-可能是一些不可打印的字符,被翻译程序删除,然后字符串就不匹配了


如果你能把这两个完整的文件放在某个地方,就可以给出明确的答案…

确保你没有两个翻译不同的相同英文字符串。在您的情况下,请检查是否在文件中的任何其他位置声明了
保存更改
。@aamir adn当compilemessages管理命令正常工作时,该文件肯定只包含唯一的msgid字符串(如果多次声明同一字符串,则编译将失败)不幸的是,在运行makemessages命令之前,我忘记了备份django.po文件,因此我无法实际比较这两个文件的内容。我给出的示例只是为了说明发生了什么,并不是一个真正的区别。
msgmerge
(这就是
makemessages
在后台使用的)确实会在源字符串更改时将字符串标记为模糊的,所以很可能存在一些,可能只是很难发现-不可打印的字符、空格,大写或类似的。当你说字符串可能有变化时,你的意思是在来源中还是在实际的po文件中?在这种情况下,源字符串中的更改可以计算出来,因为源文件在git中没有更改。它可能在两侧。我见过好几次翻译人员在某处插入零宽度空格(),这可能导致您描述的行为。然而,这仍然是应该从diff中看到的东西(msgid会改变)。