如何在Django项目中重译第三方应用(如django-filebrowser)的翻译?
解决Django第三方应用翻译重写问题
核心思路
Django加载翻译时,项目级翻译目录的优先级高于所有应用(包括第三方应用)的内置翻译。直接在项目根目录的locale文件夹中覆盖第三方应用的msgid,就能实现自定义翻译,无需单独创建应用级的translations文件。
具体操作步骤
确认项目翻译配置正确
检查settings.py中的关键配置,确保启用翻译并指定项目级翻译目录:USE_I18N = True LOCALE_PATHS = [ BASE_DIR / 'locale', # 此目录翻译优先级最高 ] LANGUAGE_CODE = 'fa' # 目标语言设为波斯语生成项目级翻译文件
在项目根目录执行命令,生成波斯语的翻译模板:python manage.py makemessages -l fa执行后会在
locale/fa/LC_MESSAGES路径下生成django.po文件。覆盖第三方应用的翻译条目
打开生成的django.po文件,直接添加或修改需要重译的内容,比如:msgid "FileBrowser" msgstr "مدیریت فایل"无需额外导入gettext,直接写入对应msgid和自定义msgstr即可。
编译翻译文件
执行编译命令,将po文件转为Django可识别的mo文件:python manage.py compilemessages验证效果
重启Django服务器,即可看到第三方应用的对应文本已替换为自定义翻译。
原方法无效的原因
应用级翻译(如你创建的core应用translations.py)优先级低于第三方应用自身的内置翻译,即使调整INSTALLED_APPS顺序也无法覆盖。而项目级LOCALE_PATHS指定的目录是Django加载翻译的最高优先级,会直接覆盖所有同名msgid的翻译内容。
额外提示
- 所有需要重译的第三方应用文本,都可以直接在项目级
django.po中添加对应条目,无需修改site-packages中的原文件(避免第三方应用更新时丢失自定义翻译)。 - 新增重译内容后,需重新执行
makemessages和compilemessages命令。
内容的提问来源于stack exchange,提问作者Omid Shojaee
相关产品推荐
相关产品推荐

