2012-04-25 56 views
2

我使用Django创建两种语言的Web项目:英语和德语。 该文档的默认语言是英语,我用德语翻译了它,并创建了一个.po文件。Django:错误的语言偏好

我的想法是,如果有人说德语,浏览器的语言环境设置为“德”,Django应该切换到德语(我提供的翻译)。但在其他情况下,它应该切换到英语。

问题是,它正好相反,我不知道为什么!

现状:如果浏览器的语言环境设置为英语,则网站以英语显示。但在任何其他情况下,它都以德语显示。

LANGUAGE_CODE = 'en-us' 

_ = lambda s: s 
LANGUAGES = (
     ('en', _('English')), 
     ('de', _('German')), 
) 

中间件设置正确,locale-path也是! 当我测试网站时,我清除了所有的cookie和缓存。 我试图提供两种翻译(germand和英语,尽管它已经用英文写成),但仍然具有相同的效果。

感谢您的帮助。

+1

请参阅get_language_from_request函数。了解如何选择默认的语言代码。 – sergzach 2012-04-25 10:41:32

+0

尝试使用该功能进行调试。 django/utils/translation/trans_real.py – sergzach 2012-04-25 10:47:09

回答

0

如果您想让您的用户能够指定语言,确保LocaleMiddleware启用:

MIDDLEWARE_CLASSES = (
    ... 
    'django.middleware.locale.LocaleMiddleware', 
    ... 
) 

然后Django会寻找依次用户的语言首选项:

所以最直接在Django会话中明确设置语言的方法是重写request.session ['django_language']:

def someview (request): 
    ... 
    request.session['django_language'] = 'en' 
    ... 
+0

但这是否意味着即使用户是德语发言者,该网站也会以英文显示? - 是的,试了一下。即使当我将浏览器的语言环境设置为'de'时,界面也是英语 – user1351482 2012-04-25 09:35:20

+0

为什么不把语言选择的一些下拉或链接,这将像大多数网站一样调用您的视图并相应地更改语言。 – 2012-04-25 09:50:43

+0

我知道这是可能的,但像大多数网站一样,我想检测浏览器的语言并提供语言选择的下拉菜单。 – user1351482 2012-04-25 10:13:08