【问题标题】:How to remove the language identifier from django-cms 2.4 URLs?如何从 django-cms 2.4 URL 中删除语言标识符?
【发布时间】:2013-07-31 08:41:47
【问题描述】:

我已关注tutorial 制作了一个新的 Django-CMS (2.4) 站点。我只使用一种语言(英语)。

在我的网站 URL 中包含语言标识符“/en/”的自动重定向。如何删除它?

谢谢。

【问题讨论】:

    标签: django multilingual django-cms


    【解决方案1】:

    选项 1:

    在您的设置文件中设置 USE_I18N = False

    Django 的国际化钩子默认开启...如果你不使用国际化,你应该花两秒钟在你的设置文件中设置 USE_I18N = False。 [Django documentation:Translation]

    国际化是从 Django “继承”的。 Django-cms 2.4 使用支持internationalization 和使用 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”。

    【讨论】:

    • 应该可以在 settings.py 中配置 :)
    【解决方案2】:

    @ppetrid 的回答仍然正确。但是,从 Django 1.6 开始,patterns 不再可用。将现有代码更改为:

    from django.conf.urls import patterns
    
    urlpatterns = (
      url(r'^admin/', include(admin.site.urls)),
      url(r'^', include('cms.urls')),
    )
    

    如果您也将'', 留在模式中,您也会收到警告。

    【讨论】:

      【解决方案3】:

      在 django 版本 1.8.18 中,您只需将 False 放在 settings.py 中的此变量中

      USE_I18N = False
      
      USE_L10N = False
      

      【讨论】:

        【解决方案4】:

        如果您想在 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 的角度来看,如果您已经使用其中的语言代码建立了链接,它可能不是最佳选择。

        【讨论】:

          猜你喜欢
          • 2015-06-30
          • 1970-01-01
          • 2018-07-18
          • 2019-07-13
          • 2013-01-24
          • 1970-01-01
          • 2017-12-30
          • 1970-01-01
          • 2012-05-20
          相关资源
          最近更新 更多