我怎么说出为什么Django忽略了Accept-Language标题?

时间:2009-11-01 23:09:24

标签: django google-app-engine internationalization google-app-engine-patch

我有一个Django应用程序(在Google App Engine上)我希望国际化。

settings.py:

USE_I18N = True
LANGUAGE_CODE = 'en'

# Restrict supported languages (and JS media generation)
LANGUAGES = (
  ('en', 'English'),
  ('fr', 'French'),
)

MIDDLEWARE_CLASSES = (
  'ragendja.middleware.ErrorMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  # i18n
  'django.middleware.locale.LocaleMiddleware',
  ...

我已在locale / fr / LC_MESSAGES中为我的应用生成了.po和.mo文件(但不是在全局级别)。

我将浏览器Accept-Language标题设置为“fr”,Django忽略它。当我查看request.LANGUAGE_CODE时,它总是“en”。

我可以告诉浏览器是正确的,因为我访问了一些其他支持i18n的网站,它返回法语。

如何找到Django认为我的设置缺失的内容?

我看到this question并没有帮助我。

我在Google App Engine上使用app engine patch 1.0.2.2运行Django 1.0。

2 个答案:

答案 0 :(得分:3)

Django有一定的顺序,就i18n而言。

首先检查LANGUAGE_CODE。它是站点范围内的语言,如果没有设置其他内容,这就是用户获得的语言。

其次,由于您已添加LocaleMiddleware,因此会检查是否在用户会话中设置了django_language。我建议在数据库中清除会话信息或创建一个全新的用户来试用。

第三,它检查是否设置了django_language cookie(实际上,cookie的名称是由LANGUAGE_COOKIE_NAME定义的)。我建议删除这个cookie。

第四,它查找Accept-Language HTTP标头。这是您的浏览器设置的来源。

祝你好运!

答案 1 :(得分:0)

this page开始,您可以从请求中删除$!,然后退回到#! /bin/bash cd /mnt/go/src/github.com/something pwd bash -c 'nohup go run apps/something/main.go >> /var/logs/go/crash.log 2>&1 & echo $! > /var/run/something.pid' cat /var/run/something.pid

HTTP_ACCEPT_LANGUAGE