Django模板中日/月名称本地化失效问题求助
问题
希望在当前选中的语言下显示本地化的日名和月名,但Django始终显示英文。语言选择功能正常(LANGUAGE_CODE显示为it),但日期名称未本地化。
模板代码:
{{ LANGUAGE_CODE }} {% localize on %} {{ day|date:"l" }} {% endlocalize %}
实际输出:
it
Friday
预期输出:
it
Venerdì
补充情况:使用默认格式{{ day }}时,日期格式会随语言变化(英文显示April 25th 2025,意大利语显示25th April 2025),但月名April始终为英文。
配置信息:
- settings.py:
USE_I18N = True USE_L10N = True USE_TZ = True - 环境:Python 3.9.5、Django 4.2.20、Ubuntu 20.04
- 视图传递日期的代码:
return render(request, 'events/event_register.html', { 'form': form, 'event': event, 'day': datetime.now() })
解决方案
要实现日/月名称的本地化,需要完成以下几个关键步骤:
- 安装系统语言包
Ubuntu下需要安装对应语言的locale文件,以意大利语为例:
sudo locale-gen it_IT.UTF-8 sudo update-locale
完善settings.py配置
添加LOCALE_PATHS指定翻译文件存储路径(先在项目根目录新建locale文件夹):import os LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ]配置支持的语言列表:
LANGUAGES = [ ('en', 'English'), ('it', 'Italian'), ]生成并编译Django翻译文件
生成意大利语的.po文件:python manage.py makemessages -l it编辑
locale/it/LC_MESSAGES/django.po文件,找到日期相关翻译项(如Friday对应Venerdì、April对应Aprile),填写正确翻译内容。
编译.po为可加载的.mo文件:python manage.py compilemessages使用时区感知的日期对象
由于USE_TZ = True,视图中需用Django时区工具生成日期,替换原生datetime.now():
from django.utils import timezone # 替换原有代码中的datetime.now() 'day': timezone.now()
- 模板中正确加载l10n标签库
在模板开头添加标签库加载语句:
{% load l10n %}
确保{% localize on %}标签能正常生效。
完成以上步骤后,日/月名称即可根据选中的语言正确本地化显示。
内容的提问来源于stack exchange,提问作者Sifro
相关产品推荐
相关产品推荐

