You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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。
    思路大概是:

    1. 读取django-allauth对应语言的.po文件(比如venv/lib/pythonX.X/site-packages/allauth/account/locale/zh_CN/LC_MESSAGES/account.po),提取所有msgid。
    2. 读取你项目生成的.po文件,过滤掉那些在allauth msgid列表里的条目。
    3. 将过滤后的内容写回项目的.po文件。
      这样就能自动清理掉那些不需要的翻译串,而且可以把这个脚本集成到你的翻译流程里,每次运行makemessages后自动执行。

另外,如果你用Weblate管理翻译,还可以在Weblate的项目配置里设置“忽略的msgid”规则,直接让Weblate跳过这些来自allauth的字符串,不用手动处理po文件。

备注:内容来源于stack exchange,提问作者Philipp S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:48:15