Ign*_*nas 82
或者你也可以在你的观点中得到这个
request.LANGUAGE_CODE
ach*_*zot 35
请注意用于获取语言的方法.根据哪种方法,Django将使用不同的方式和信息来确定使用的正确语言.
使用该django.utils.translation.get_language()
函数时,它链接到线程语言.在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
Run Code Online (Sandbox Code Playgroud)
如果你想让django检查路径和/或请求(语言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
我发现通过谷歌找到关于这个主题的这些差异并不是很容易,所以这里有待进一步参考.
只是要补充一点,如果你确实使用django.utils.translation.get_language()
那么你应该记住,如果这段代码将被异步调用(例如作为芹菜任务),那么这种方法将因为它在不同的线程中运行而无法工作.
您可以在 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 }}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62435 次 |
最近记录: |