【问题标题】:How can I change the language of a whole Django CMS website?如何更改整个 Django CMS 网站的语言?
【发布时间】:2015-04-26 00:21:39
【问题描述】:

我想将使用 Django CMS 编写的网站的语言从 en-us 更改为 de,以便将来 en-us 中的所有当前内容都将显示为 de

我试过了

Page.objects.all().update(languages='de')

但之后到处都是404错误。

我还有什么需要改变的?

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    接受的答案与较新版本的 Django CMS 不兼容。 language 属性已更改为 languages(另请参阅 https://stackoverflow.com/a/56162296/522248)。对于您的页面的draft mode 版本,这包含一个逗号分隔的可用语言列表。简单地搜索确切的语言并将其更新到下一个版本是行不通的。

    鉴于我们想将 'nl' 更改为 'nl-nl',以下内容应该匹配:

    nl,en,de
    de,nl,en
    en,de,nl
    nl
    

    我们不能只搜索“nl”,因为以下内容不能匹配:

    nl-nl
    nl-nl,en
    

    我的解决方案:

    from_lang = 'nl'
    to_lang = 'nl-nl'
    
    # Match our lang at start, middle or end of list
    lang_regex = r'^(.*,)?{}(,.*)?$'.format(from_lang)
    
    # Get all distinct combinations of languages that contain our language
    language_combinations = Page.objects\
        .filter(languages__regex=lang_regex)\
        .values('languages')\
        .distinct()
    
    # Create a mapping for each combination, replacing the old for the new lang
    language_mappings = [
        (
            page['languages'],
            re.sub(lang_regex, '\\1{}\\2'.format(to_lang), page['languages'])
        ) for page in language_combinations
    ]
    
    # Update all pages to new lang
    for old_languages, new_languages in language_mappings:
        Page.objects\
            .filter(languages=old_languages)\
            .update(languages=new_languages)
    
    # Also update Title and CMSPlugins
    Title.objects.filter(language=from_lang).update(language=to_lang)
    CMSPlugin.objects.filter(language=from_lang).update(language=to_lang)
    
    

    【讨论】:

      【解决方案2】:

      要更改 django CMS 网站上所有内容的语言代码,请运行以下命令(从 'en-us' 切换到 'de'

      Page.objects.filter(language='en-us').update('de')
      Title.objects.filter(language='en-us').update(language='de')
      CMSPlugin.objects.filter(language='en-us').update(language='de')
      

      【讨论】:

      • 一开始我觉得很好,但是 - 当然 - 现在所有 cmsplugins 都消失了。我是否也可以在某处找到一个列表来显示我需要更改的所有字段? (关于占位符和 CMSPlugins)?我编辑了我的问题,以更清楚地表明我想保留内容。
      • 你说得对,CMSPlugin 也需要更新,我编辑了我的回复。
      • 此答案不再适用于 Django CMS 的较新版本(3.6.0+)。请参阅stackoverflow.com/questions/28694763/…,它也适用于较新的版本
      【解决方案3】:

      要添加到@ojii 的答案,使用 django-cms 3.6.0 和 django 1.11.20 现在的过程是:

      1. 修改settings.py:
      #LANGUAGE_CODE = 'en-us'
      LANGUAGE_CODE = 'en'
      
      1. 更新页面、标题、CMSPlugins(注意页面的languages):
      Page.objects.filter(languages='en-us').update(languages='en')
      Title.objects.filter(language='en-us').update(language='en')
      CMSPlugin.objects.filter(language='en-us').update(language='en')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 2023-03-08
        • 2017-07-23
        • 2012-02-08
        • 1970-01-01
        • 2023-03-16
        • 2014-09-10
        相关资源
        最近更新 更多