【问题标题】:How to change language in django-modeltranslation in function如何在函数中更改 django-modeltranslation 中的语言
【发布时间】:2017-12-04 07:09:33
【问题描述】:

我正在使用django-modeltranslation 翻译我模型中的某些字段。包运行良好,所有内容都已翻译。

但是手动切换语言没有简单的方法。

来自阅读Accessing Translated and Translation Fields

因为使用 modeltranslation 应用程序的全部意义在于翻译动态内容,所以标记为翻译的字段在访问它们时有些特殊。翻译字段返回的值取决于当前语言设置。 “语言设置”指的是Django的set_language视图和对应的get_lang函数。

使用文档中描述的set_language() 不起作用。得到:

AttributeError: 'str' object has no attribute 'POST'

这可能是因为我运行set_language() 不在视图中。

问题:如何在基本功能中为django-modeltranslation 切换语言?

【问题讨论】:

    标签: python django django-i18n django-modeltranslation


    【解决方案1】:

    django.utils.translation 中有一个叫做activate() 的方法超级简单:

    >>> from django.utils.translation import activate
    >>> activate('en')
    >>> Model.objects.first()  # will fetch english version
    >>> activate('fr')
    >>> Model.objects.first()  # will fetch french version
    

    这适用于视图和普通函数。

    如果您只想为一次提取更改语言并返回到当前语言,您可以使用django.utils.translation 中的get_language

    >>> from django.utils.translation import get_language, activate
    >>> current_language = get_language()
    >>> activate('fr')
    >>> Model.object.first()
    >>> activate(current_language)
    

    【讨论】:

      【解决方案2】:

      也许为时已晚,但您可以在设置文件中添加中间件

      MIDDLEWARE + = ['django.middleware.locale.LocaleMiddleware',]

      并且在请求头中 Key =Accept-Language Value= en, 所以现在 Django 会根据请求头切换语言库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 2020-03-23
        • 2022-07-27
        • 1970-01-01
        • 2013-01-04
        • 2020-08-29
        • 2011-03-01
        相关资源
        最近更新 更多