Windows 10执行django-admin makemessages -l pt-br未生成翻译文件如何解决
Windows下Django makemessages无文件生成的排查方案
- 第一优先验证gettext环境是否真的生效
打开终端执行gettext --version,如果无版本输出,说明之前安装的gettext没有正确配置到系统环境变量PATH中。Django只会做基础的存在性校验,在找不到gettext底层工具链的情况下不会抛出显性错误,只会走完预设流程后无文件输出。
修正方法:找到gettext安装目录下的bin子文件夹路径,加入系统环境变量的Path配置后,必须重启所有终端、IDE软件再执行命令,否则新配置的环境变量不会被加载。 - 修正执行命令的格式与参数
不要直接用全局的django-admin执行,切换到项目虚拟环境下,在manage.py所在的根目录执行:python manage.py makemessages -l pt_BR
注意语言标识的格式:Django识别的巴西葡萄牙语合法locale代码是pt_BR(用下划线连接),如果用短横线pt-br,Django会判定为非法目录名,直接跳过生成流程。 - 提前手动创建配置的locale目录
你在settings里配置的LOCALE_PATHS指向项目根目录下的locale文件夹,Windows系统下如果项目存放在同步文件夹(比如OneDrive同步的文档目录、系统盘受保护路径),Django没有权限自动创建目录,就会静默失败。
提前在manage.py所在的项目根目录手动新建locale空文件夹,再重试命令即可。 - 打开详细日志定位具体问题
执行命令时增加-v 3参数打印全量执行日志,比如:python manage.py makemessages -l pt_BR -v 3
日志会直接输出扫描的文件范围、调用的gettext可执行文件路径,如果日志显示扫描到的可翻译字符串数量为0,说明模板文件位置没有被Django扫描到——检查你的index.html是否放在已注册的exampleapp的templates子目录下,如果放在项目根目录的templates文件夹,需要把该路径加到settings.py的TEMPLATES -> DIRS配置项里,否则Django不会扫描到模板里的翻译标签。 - 排查终端权限拦截问题
Windows下的VS Code内置终端、新版Windows终端有时候会拦截子进程的错误输出,换成传统CMD窗口执行上述命令,就能看到被隐藏的报错(比如权限拒绝、命令找不到)。另外不要混用管理员权限和普通权限操作项目,避免之前生成的缓存文件权限不匹配,导致写入失败。
内容的提问来源于stack exchange,提问作者Speed Junior
相关产品推荐
相关产品推荐

