使用i18n_patterns时的默认语言

Ada*_*ver 3 python django

我正在使用i18n_patterns更改语言前缀:/ fr// de /等.它工作得很漂亮.

它是在没有语言代码的情况下尝试访问页面时添加/ en /的唯一问题.

我想知道如何将英语作为默认语言,而不是/ en/with英文版的每个URL.

谢谢.

sta*_*alk 5

有一个名为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',
)
Run Code Online (Sandbox Code Playgroud)

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'),
    # ...
)
Run Code Online (Sandbox Code Playgroud)

这个博客使用提到的包运行,其中根URL(没有前缀)呈现俄语.

文章,为什么不使用重定向.

更新

提到的包现在有SOLID_I18N_USE_REDIRECTS选择权.如果为True,将发现首选语言,并且将发生重定向到非默认语言URL(如果发现的语言等于默认值),将显示不带前缀的url.