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

时间:2015-02-24 11:36:27

标签: python django django-cms

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

我试过

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

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

我还需要改变什么?

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分:1)

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

  1. 修改settings.py
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'en'
  1. 更新页面,标题,CMS插件(请注意页面的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')

答案 2 :(得分: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)