我在我的网站上设置了多种语言和翻译,它们运行良好。在我的页面上添加了语言切换控件。
切换语言导致为每个[匿名]用户设置会话令牌。如何避免这种情况并使用 only cookie 进行本地化?我的意思是不使用会话,但在cookie中使用类似“{language:'en'}”的东西,自动处理?
settings.py 配置包含这些设置以及区域设置路径等:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
LANGUAGE_COOKIE_NAME = 'language'
答案 0 :(得分:2)
您可以通过编写自己的中间件来实现:
如果语言cookie不存在,请创建一个语言cookie。
根据cookie设置语言。
所以你可以这样写:
from django.utils import translation
class LanguageCookieMiddleware():
def process_request(self, request):
"""
Sets language from the cookie value.
"""
if request.COOKIES.has_key(COOKIE_NAME):
language = request.COOKIES.get(COOKIE_NAME)
# You should add here some code to check teh language
# variable is safe...
translation.activate(language)
request.LANGUAGE_CODE = translation.get_language()
def process_response(self, request, response):
"""
Create cookie if not there already.
Also deactivates language.
(See http://stackoverflow.com/a/13031239/388835 )
"""
if not request.COOKIES.has_key(COOKIE_NAME):
response.set_cookie(HTTP_COOKIE_NAME,
function_for_language_code_you_want())
translation.deactivate()
return response
答案 1 :(得分:1)
我不建议直接将数据存储在cookie中。
如果您抱怨大量的会话密钥,您应该在稍后删除会话密钥(可能是在浏览器关闭时?)。它取决于你。