3

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

尝试访问没有语言代码的页面时添加 /en/ 的唯一问题。

我想知道如何将英语作为默认语言,而不是 /en/ 与英语版本的每个 URL 一起使用。

谢谢。

4

1 回答 1

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',
)

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。

于 2013-05-16T06:31:12.177 回答