如何让Django忽略已在django-allauth中完成翻译的字符串,避免其出现在项目的.po文件中?
如何让Django忽略已在django-allauth中完成翻译的字符串,避免其出现在项目的.po文件中?
嘿,这个问题我太懂了——复制了第三方模板却被提取了一堆不属于自己项目的翻译串,不仅把po文件撑得乱七八糟,还给翻译团队添了不少麻烦。下面给你两个实用的解决办法:
给模板翻译标签指定第三方翻译域(推荐)
你复制的django-allauth模板里的翻译字符串,本来属于allauth的专属翻译域(比如account、socialaccount这些)。只需要在模板里的{% trans %}标签后面加上from "应用名",就能告诉Django这些翻译串要从allauth的翻译文件里取,而不会提取到你项目自己的.po文件中。
举个例子:
原来的标签是:{% trans "Sign In" %}改成:
{% trans "Sign In" from "account" %}这样运行
makemessages时,这个字符串就不会出现在你的项目po文件里了。需要注意对应好应用名,比如社交登录相关的模板要改成from "socialaccount"。用脚本清理生成的.po文件(适合不想改模板的情况)
如果不想动模板代码,可以在运行makemessages之后,写一个简单的Python脚本,自动移除那些和django-allauth翻译文件里重复的msgid。
思路大概是:- 读取django-allauth对应语言的.po文件(比如
venv/lib/pythonX.X/site-packages/allauth/account/locale/zh_CN/LC_MESSAGES/account.po),提取所有msgid。 - 读取你项目生成的.po文件,过滤掉那些在allauth msgid列表里的条目。
- 将过滤后的内容写回项目的.po文件。
这样就能自动清理掉那些不需要的翻译串,而且可以把这个脚本集成到你的翻译流程里,每次运行makemessages后自动执行。
- 读取django-allauth对应语言的.po文件(比如
另外,如果你用Weblate管理翻译,还可以在Weblate的项目配置里设置“忽略的msgid”规则,直接让Weblate跳过这些来自allauth的字符串,不用手动处理po文件。
备注:内容来源于stack exchange,提问作者Philipp S.
相关产品推荐
相关产品推荐

