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

如何阻止Django自动翻译日期,实现多语言下日期格式统一

Django多语言站点统一日期格式解决方案

全局配置层面修改

你当前开启了USE_L10N = True,该配置会让Django自动调用当前语言对应的本地化日期格式,是触发问题的核心原因,可按需求二选一修改:

  • 完全关闭日期本地化,全局统一格式:
    直接修改settings.py配置即可,所有日期渲染、校验都会优先走你指定的固定格式:
    # 关闭本地化格式自动适配
    USE_L10N = False
    
    # 按需自定义全局统一的日期、时间格式
    DATE_FORMAT = 'Y-m-d'
    DATETIME_FORMAT = 'Y-m-d H:i:s'
    TIME_FORMAT = 'H:i:s'
    
  • 保留其他本地化能力,仅统一日期格式:
    不需要关闭USE_L10N,新增配置指定自定义格式文件路径:
    # settings.py新增配置,your_project_name替换为你实际的项目名
    FORMAT_MODULE_PATH = 'your_project_name.formats'
    
    然后在项目根目录新建formats文件夹,对应每一种支持的语言新建子文件夹(en/fr/ar),每个子文件夹下新建formats.py,所有文件内都写入相同的日期格式配置即可:
    DATE_FORMAT = 'Y-m-d'
    DATETIME_FORMAT = 'Y-m-d H:i:s'
    TIME_FORMAT = 'H:i:s'
    

表单校验问题修复

如果不想修改全局配置,可单独给表单的日期字段关闭本地化、固定输入格式,强制校验规则不随语言切换变化:

from django import forms

class YourDateForm(forms.Form):
    # 普通表单字段配置
    publish_date = forms.DateField(
        localize=False,
        input_formats=['%Y-%m-%d'] # 格式和你前端传的格式对齐即可
    )

# 模型表单同理,重写字段配置即可
class YourModelForm(forms.ModelForm):
    class Meta:
        model = YourModel
        fields = ['publish_date']
        widgets = {
            'publish_date': forms.DateInput(format='%Y-%m-%d')
        }

前端日期选择器适配

法语站点下选择器仍显示英文,是因为前端选择器的语言没有和Django站点语言联动,按以下步骤调整:

  1. 提前引入你所用日期选择器的所有多语言包
  2. 在模板中获取Django当前语言代码,初始化选择器时传入语言参数,同时固定输出格式和后端对齐:
<script>
// 获取Django当前语言
const currentSiteLang = '{{ LANGUAGE_CODE }}'
// 初始化日期选择器
$('.date-picker').datepicker({
    language: currentSiteLang,
    format: 'yyyy-mm-dd', // 和后端统一格式保持一致
    autoclose: true
})
</script>

模板日期渲染注意事项

在模板中输出日期时,不要直接输出日期对象,要用date过滤器指定固定格式,避免自动本地化:

{# 错误写法,会自动按当前语言渲染格式 #}
{{ publish_date }}

{# 正确写法,强制按指定格式渲染 #}
{{ publish_date|date:"Y-m-d" }}

内容的提问来源于stack exchange,提问作者nassim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:18:05