使用 Django,我希望用户能够选择站点语言。
当浏览器中设置的用户首选语言为英语时,它工作得很好。用户可以按预期在英语和葡萄牙语之间切换。
但是,当我更改浏览器首选语言时,语言切换器停止工作(我在 Opera、Google Chrome、Firefox 和 Epiphany 中进行了测试——无法在 IE 或 Safari 上进行测试)。
我想我做错了什么,但不知道是什么。让我感到困惑的是,当首选语言设置回默认值时它可以正常工作......
Django 文档说它将使用以下内容来选择语言:
首先,它在当前用户的会话中查找 django_language 键。如果做不到这一点,它会寻找一个 cookie。如果做不到这一点,它会查看 Accept-Language HTTP 标头。此标头由您的浏览器发送,并按优先级告诉服务器您喜欢哪种语言。Django 会尝试标题中的每种语言,直到找到具有可用翻译的语言。否则,它将使用全局 LANGUAGE_CODE 设置。
为什么当浏览器具有首选语言时,我在语言切换器中的行为与使用默认语言时不同?
我关于中间件的 settings.py 如下
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
我的语言环境文件夹包含以下结构:
locale/
pt_BR/
LC_MESSAGES/
django.mo
django.po
我的语言切换器(在模板中)如下:
<div id="secondary-menu" class="navigation">
<ul class="menu">
<li><a href="/about-us" > {{ second1 }}</a></li>
<li><a href="/free-culture" > {{ second2 }}</a></li>
<li><a > {{ second3 }}</a>
<ul>
<li><form name="setLangEnglish" method="post" action="/i18n/setlang/">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="en-us"/>
<input class="language-switcher" type="submit" alt="English" name="submit" value="English"/>
</form>
</li>
<li><form name="setLangPortuguese" method="post" action="/i18n/setlang/">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="pt-br"/>
<input class="language-switcher" type="submit" alt="Portugues" name="submit" value="Portugues"/>
</form>
</li>
</ul>
</li>
</ul>
</div>