You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:57:09