为什么Django的makemessages函数会忽略html文件?

7 投票
3 回答
4022 浏览
提问于 2025-04-16 23:33

我在一个项目中尝试使用Django的语言本地化功能,但每次运行makemessages时,它总是忽略我模板文件夹里的html模板。

我从项目的根目录运行了 python manage.py makemessages -a,结果所有在 .py 文件中标记为需要翻译的字符串都成功添加到了 .po 文件里。

但是,html模板中的字符串,比如 {{ trans "String_to_translate" }},却被忽略了,没有被添加到 .po 文件中,尽管在模板的顶部我已经加载了必要的模块 {% load i18n %}

为了测试整个模板文件夹是否被makemessages功能排除,我创建了一个 .py 文件,并在里面添加了一个需要翻译的字符串,结果它成功地被添加到了 .po 文件中。

综上所述,有人知道可能是什么原因导致这个问题吗?

3 个回答

0

{{ trans "string" }} 的写法改成 {% trans "string" %}


这个回答是对问题的一个编辑,问题是为什么Django的makemessages函数会忽略html文件进行语言本地化?,提问者是dlmccoy,内容遵循CC BY-SA 3.0协议。

4

试着在你的 app 文件夹里为 templates 文件夹创建一个符号链接。然后在你的应用文件夹中使用符号链接选项来调用 makemessages,命令是 django-admin.py makemessages --all --symlinks

cd /myproject
ln -s /myproject/templates /myproject/myapp/templates    
cd /myproject/myapp
django-admin.py makemessages --all --symlinks

makemessages 会忽略 TEMPLATE_DIRSINSTALLED_APPS。模板文件夹需要放在你的应用文件夹里,而且 makemessages 需要在你的应用文件夹中运行。

4

你的 templates 文件夹要么放在一个已经在 INSTALLED_APPS 列表中的应用里,要么放在一个在 TEMPLATE_DIRS 列表中的目录里,这些设置都在你的 settings.py 文件里。

撰写回答