【问题标题】:Django's get_current_language strange behaviorDjango 的 get_current_language 奇怪的行为
【发布时间】:2019-12-12 09:59:51
【问题描述】:

我想根据我的 settings.py 中定义的语言将我的 html 标记中的 lang 属性设置为当前语言环境的语言。我不使用 LocaleMiddleware 并且用户无法选择语言。

(我在同一页面有不同的域。如果有人想以不同的语言查看网站,则用户必须转到不同的网站)

settings.py

LANGUAGE_CODE = 'pl-PL'
USE_I18N      = True
USE_L10N      = True

LANGUAGES = [
    ('en', 'English'),
    ('de', 'German'),
    ('pl', 'Polish'),
    ('ru', 'Russian'),
    ('uk', 'Ukrainian'),
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'pipeline.middleware.MinifyHTMLMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
]

Django 版本

Django==2.0.9

模板

{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% get_language_info for LANGUAGE_CODE as lang %}

<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">

输出

如果我在不进行交互的情况下刷新页面,我有时会遇到:

  • pl-pl
  • PL-PL

为什么会这样?

【问题讨论】:

    标签: django django-i18n


    【解决方案1】:

    您可以尝试使用{{ lang.code }} 仅获取pl 部分(取决于语言)。


    在这种情况下,Django 从 Accept-Language HTTP 标头中获取用户语言偏好,该标头通常包含多个语言代码,具有优先级。

    它可能包含一种基本语言的多个语言代码,具体取决于您的系统区域设置、浏览器设置等;即 pl-PL,pl-pl,pl;q=0.7 其中 q 是优先级。

    Django 解析标题并根据优先级对语言代码进行排序。由于多个代码的优先级相同 - 它们将在每个请求的结果中以不同的顺序出现,并且将使用第一个。

    【讨论】:

    • 啊,好吧,所以在我的情况下,我根本不应该使用它。我编写了自己的 context_process,它只是直接从设置中添加 LANGUAGE_CODE。
    猜你喜欢
    • 2017-01-30
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2016-04-27
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多