我正在使用 i18n_patterns 更改语言前缀:/fr/ /de/ 等。它工作得很好。
尝试访问没有语言代码的页面时添加 /en/ 的唯一问题。
我想知道如何将英语作为默认语言,而不是 /en/ 与英语版本的每个 URL 一起使用。
谢谢。
有一个名为django-solid-i18n-urls的包,可以满足您的需求。
有一件事要提:它根本不使用重定向。因此,如果用户将来到站点并且他的首选语言不是en
(默认设置在 中settings.LANGUAGE_CODE
),但是例如fe
,他不会被重定向到/fe/
,他必须手动进行。如果您仍然想使用重定向,可以修改代码,幸运的是它没有太多。
在这里如何安装它(自述文件中更详细的安装顺序):
1)pip install solid_i18n
2) 在 settings.py 中指定根 url 的语言:LANGUAGE_CODE = 'en'
3) 将 SolidLocaleMiddleware 而不是 LocaleMiddleware 添加到 MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
)
4) 使用solid_i18n_patterns 而不是i18n_patterns
from django.conf.urls import patterns, include, url
from solid_i18n.urls import solid_i18n_patterns
# urls without language, this can be skipped
urlpatterns = patterns(''
# ...
)
# urls, that must have default language at root url and prefixes for other languages
urlpatterns += solid_i18n_patterns('',
url(r'^about/$', 'about.view', name='about'),
# ...
)
该博客使用提到的包运行,其中根 url(不带前缀)呈现俄语。
文章,为什么不使用重定向。
更新
提到的包现在有SOLID_I18N_USE_REDIRECTS
选项。如果为 True,将发现首选语言并重定向到非默认语言 url,或者(如果发现的语言等于默认)将显示不带前缀的 url。