我按照教程制作了一个新的 Django-CMS (2.4) 站点。我只使用一种语言(英语)。
有一个自动重定向以在我的网站的 URL 中包含语言标识符“/en/”。如何删除它?
谢谢。
选项1:
在设置文件中设置USE_I18N = False。
Django 的国际化钩子默认是打开的……如果你不使用国际化,你应该花两秒钟在你的设置文件中设置 USE_I18N = False。[Django 文档:翻译]
国际化是从 Django “继承”的。Django-cms 2.4 使用支持国际化和使用 USE_I18N 标志的 Django 1.5。该标志已在所有后续 django 版本中使用。
选项 2:
替换此模式注册:
urlpatterns = i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
有了这个:
from django.conf.urls import patterns
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
您指向的教程使用的i18n_patterns
方法正是这样做的:将语言代码添加到您的网址。
另请注意,如果您不使用多种语言,则可以从 MIDDLEWARE_CLASSES 中安全地删除 'django.middleware.locale.LocaleMiddleware' 和 'cms.middleware.language.LanguageCookieMiddleware'。
@ppetrid 的回答仍然是正确的。但是,从 Django 1.6patterns
开始,不再可用。将现有代码更改为:
from django.conf.urls import patterns
urlpatterns = (
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
如果您也将 留在模式中,您也会收到警告'',
。
在 django 版本 1.8.18 中,您只需将False
这个变量放在 settings.py
USE_I18N = False
USE_L10N = False
如果您想在 URL 中保留一种语言,例如因为您在网络中有带有语言代码的反向链接,您可以简单地在 settings.py 中取出另一种语言
LANGUAGES = (
#('en', gettext('en')),
('de', gettext('de')),
)
CMS_LANGUAGES = {
'default': {
'public': True,
'hide_untranslated': False,
'redirect_on_fallback': True,
},
1: [
{
'public': True,
'code': 'de',
'hide_untranslated': False,
'name': gettext('de'),
'redirect_on_fallback': True,
},
# {
# 'public': True,
# 'code': 'en',
# 'hide_untranslated': False,
# 'name': gettext('en'),
# 'fallbacks': ['de'],
# 'redirect_on_fallback': True,
# },
],
}
这样 URL 仍然显示www.example.com/de/foo.html
。在上面的示例中,这/de/
将丢失,这将使您在网络上的所有 URL 变得毫无意义。
因此,从 SEO 的角度来看,如果您已经使用其中的语言代码建立了链接,它可能不是最佳选择。