Django:尽管选择了语言,但表单仍然依赖于LANGUAGE_CODE来格式化日期时间(包括演示)



我创建了一个小演示来展示这个问题。

当您单击英式英语时,您可以看到日期和时间格式如何相应地变化,这很棒。

现在,如果您单击"添加",您将看到如何为您填充当前日期和时间。 但是,它们仍然带有美国日期格式,而不是选定的英国语言。

解决此问题的唯一方法是在 settings.py 中将LANGUAGE_CODE = 'en-us'更改为LANGUAGE_CODE = 'en-gb'。这种方法显然是无用的,因为它不再是动态的,并且偏袒一个群体而不是另一个群体。这应该是最后一个优先级,因为所选语言应该具有更高的优先级。

我已经创建了自定义formats.py来覆盖文档中描述的enen_GB的日期和时间格式,因此我不知道我还能做什么。

请非常友善,从我的保管箱下载我的演示(22 kb):您所要做的就是编辑 settings.py 并将路径调整为 sqlite.db。

我是否忽略了某些内容,或者这是一个 Django 错误?

固定!!嗨,Kave,经过一段时间的研究,我终于找到了解决方案。

  • 首先,你应该使用 activate( language_code ) 切换到新的语言。
  • 您必须将以下字段和小部件都设置为本地化:

示例切换语言:

def display_current_language(request):
    if request.LANGUAGE_CODE == 'en-gb':
        lang = "You prefer to read British English {code}.".format(
                  code=request.LANGUAGE_CODE )
        activate(request.LANGUAGE_CODE)
    elif request.LANGUAGE_CODE == 'en-us':
        lang = "You prefer to read American English {code}.".format(
                  code=request.LANGUAGE_CODE )
        activate('en-us')    
    else:
        lang = "You prefer to read Deutsch {code}.".format( 
                   code=request.LANGUAGE_CODE )
        activate(request.LANGUAGE_CODE)    
    return lang

使用您的模型(公司)和字段(日期)进行采样:

class CompanyForm(ModelForm):        
    class Meta:
        model = Company 
    def __init__(self, *args, **kwargs):
        super(CompanyForm, self).__init__(*args, **kwargs)
        self.fields['date'].localize = True
        self.fields['date'].widget.is_localized = True

最新更新