hol*_*lms 42 django internationalization
是否有一些全局变量用于django模板中的gettin'语言代码或至少通过视图传递它?例如:{{ LANG }}
应该生成"en"例如..当人们使用时我真的不舒服request.LANGUAGE_CODE
.
详细解释将被赞赏=)
小智 115
这是一个古老的话题.但是有些人可能觉得它很有用.
{% load i18n %}
...
{% get_current_language as LANGUAGE_CODE %}
Run Code Online (Sandbox Code Playgroud)
Django 参考和示例.
Chr*_*gan 20
如果它尚不存在,则需要编写模板上下文处理器.这是你如何做到这一点.
把它放在某个地方:
def lang_context_processor(request):
return {'LANG': request.LANGUAGE_CODE}
Run Code Online (Sandbox Code Playgroud)
然后,添加对它的引用TEMPLATE_CONTEXT_PROCESSORS
设置.像这样的东西:
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'myproject.myapp.templatecontext.lang_context_processor',
)
Run Code Online (Sandbox Code Playgroud)
(我建议添加到全局设置,因为这意味着当新的上下文处理器添加到默认值时,您不会意外地破坏.)
但是,它确实存在,作为内置模板上下文处理器django.template.context_processors.i18n
.你可以访问它LANGUAGE_CODE
.
纯粹为了兴趣,这里是该功能的定义:
def i18n(request):
from django.utils import translation
return {
'LANGUAGES': settings.LANGUAGES,
'LANGUAGE_CODE': translation.get_language(),
'LANGUAGE_BIDI': translation.get_language_bidi(),
}
Run Code Online (Sandbox Code Playgroud)
确保您使用的RequestContext
是模板渲染,而不是普通模板Context
,否则它将无效.
经过测试Django==1.11.2
.
启用I18N
并使用i18n
模板上下文处理器.
# setings.py
USE_I18N = True
# ...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# ...
'django.template.context_processors.i18n',
# ...
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
然后它在模板中很简单.
# template.html
{% load i18n %}
{{ LANGUAGE_CODE }}
Run Code Online (Sandbox Code Playgroud)
但是,在视图函数中使用render()
,而不是在模板中访问变量:render_to_response()
LANGUAGE_CODE
render_to_response()这个
此函数在引入render()之前,其工作方式类似,但它不会使响应中的请求可用.不建议这样做,将来可能会被弃用.
归档时间: |
|
查看次数: |
28379 次 |
最近记录: |