代码之家  ›  专栏  ›  技术社区  ›  Philipp Zedler mnieber

如何更改整个Django CMS网站的语言?

  •  1
  • Philipp Zedler mnieber  · 技术社区  · 9 年前

    我想把用Django CMS编写的网站的语言从 en-us de 以所有呈现内容的方式 美国英语 将显示为 判定元件 未来

    我试过了

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

    但后来到处都有404个错误。

    我还需要改变什么?

    3 回复  |  直到 9 年前
        1
  •  2
  •   Wouter Klein Heerenbrink    3 年前

    公认的答案与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
  •  2
  •   ojii    9 年前

    要更改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')
    
        3
  •  1
  •   tehfink    5 年前

    用django cms 3.6.0&django 1.11.20现在的程序是:

    1. 修改 settings.py :
    #LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'en'
    
    1. 更新页面、标题、CMPPlugins(注意 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')