Django-admin makemessages无法识别Jinja2模板中ngettext字符串问题
解决Django makemessages无法识别Jinja2模板中ngettext的问题
问题核心是Django的makemessages工具默认对Jinja2模板里的ngettext函数调用识别支持不佳,但对gettext和模板标签形式的复数语法支持正常,给你两个靠谱的解决办法:
方法一:改用Jinja2标准复数模板标签(推荐)
把模板里的ngettext函数调用改成Jinja2官方的{% trans %}复数块标签写法,这样makemessages能百分百识别复数条目:
{% trans num=3 %} %(num)d lesson {% plural %} %(num)d lessons {% endtrans %}
方法二:显式指定模板扩展名并重跑命令
如果非要保留ngettext函数写法,可以在执行命令时显式指定处理html扩展名(避免工具漏扫模板文件),你的命令调整后如下:
django-admin makemessages -l en --extension=html --ignore="*/site-packages/*" --ignore="*/django/*"
额外检查项
- 确认项目
settings.py里配置了正确的本地化路径:
import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ]
- 确保系统已安装
gettext工具(makemessages依赖它,Linux可通过apt install gettext安装,macOS用brew install gettext)
内容的提问来源于stack exchange,提问作者ResolverFX
相关产品推荐
相关产品推荐

