如何在Django中获取当前语言?

xhv8bpkk  于 2023-08-08  发布在  Go
关注(0)|答案(7)|浏览(131)

如何获取Django中的当前语言?

busg9geu

busg9geu1#

特别感兴趣的函数是django.utils.translation.get_language(),它返回当前线程中使用的语言。参见文档。

wxclj1h5

wxclj1h52#

或者你也可以在你的观点中得到这一点

request.LANGUAGE_CODE

字符串

sy5wg1nm

sy5wg1nm3#

注意你使用的语言。取决于哪种方法,Django将使用不同的方法和信息来 * 确定 * 要使用的正确语言。

当使用django.utils.translation.get_language()函数时,它链接到thread语言。在Django 1.8之前,当翻译被禁用时,它总是返回settings.LANGUAGE_CODE。如果你想手动重写线程语言,你可以使用override()activate()函数,它的命名不是很明确,但仍然很有用:

from django.utils import translation

with translation.override('fr'):
    print(_("Hello")) # <= will be translated inside the with block

translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually

字符串
如果你想让django检查路径和/或request(language cookie,...),这是更常见的,例如:www.example.com/en/<somepath> vs www.example.com/fr/<somepath>,使用django.utils.translation.get_language_from_request(request, check_path=False)。此外,它将始终返回settings.LANGUAGES中的有效语言集
我发现通过谷歌找到关于这个主题的这些差异并不是很容易,所以在这里它是为了进一步参考。

wh6knrhe

wh6knrhe4#

如果你使用django.utils.translation.get_language(),那么你应该记住,如果这段代码将被异步调用(例如:作为celery任务),那么这种方法将无法工作,因为它运行在不同的线程中。

qv7cva1a

qv7cva1a5#

你可以在Django的模板语言中使用这些模板标签:

{% load i18n %}

{% get_current_language as LANGUAGE_CODE %}

Current language code: {{ LANGUAGE_CODE }}<br>

{% get_current_language_bidi as LANGUAGE_BIDI %}

{% if LANGUAGE_BIDI %}RTL <br>{% endif %}

{% get_language_info for LANGUAGE_CODE as lang %}

Language code: {{ lang.code }}<br>
Name of language: {{ lang.name_local }}<br>
Name in English: {{ lang.name }}<br>
Bi-directional: {{ lang.bidi }}
Name in the active language: {{ lang.name_translated }}

字符串

khbbv19g

khbbv19g6#

您可以阅读系统的locale以了解语言信息。

b1uwtaje

b1uwtaje7#

你可以在Django Views中通过LANGUAGE_CODE和get_language()获取当前语言,如下所示:

# "views.py"

from django.shortcuts import render
from django.utils.translation import get_language

def test(request):
    print(request.LANGUAGE_CODE) # en
    print(get_language()) # en
    return render(request, 'index.html')

字符串
你可以在Django模板中使用LANGUAGE_CODE和get_current_language获取当前语言,如下所示。* get_current_language需要加载i18n:

{% "index.html" %}

{% load i18n %}

{{ request.LANGUAGE_CODE }} {% "en" %}

{% get_current_language as current_language %}
{{ current_language }} {% "en" %}

相关问题