【问题标题】:Django-CMS multi-regional and multilingual subsiteDjango-CMS 多区域多语言子站点
【发布时间】:2013-05-21 09:52:46
【问题描述】:

我们必须创建多区域和多语言的网站。例如:

对于多语言,django-cmsi18n_patterns 处理得很好。但是当我尝试使用 django 站点框架添加多区域支持时,它无法按预期工作:(。我添加了带有子域的站点:mysite.com/au、mysite.com/vn、mysite.com/us。在 django -cms 管理页面 我已经向站点添加了内容。但是现在我不知道如何配置 url 以匹配站点。

我想要http://mysite.com/<region>/<language>/i18n_patterns 似乎强制使用http://mysite.com/<language>/<region>/ 之类的网址。怎么改呢

请帮忙

【问题讨论】:

    标签: django multilingual django-cms django-sites


    【解决方案1】:

    我不确定你的 URL 方案有多灵活,但是这个怎么样:

    使用标准的 django CMS i18n URL 规则(这样你最终会得到 yoursite.com/ja/ 和 yoursite.com/en/)。

    接下来创建两个页面:“au”和“jp”。将主页重定向到两个页面之一(或为此编写一些更智能的逻辑,例如在中间件中)。现在将您的区域内容保留在这两个子树中。

    如果您不想,请不要将“au”子树中的页面翻译成日语。

    【讨论】:

    • 您的解决方案似乎更易于实施,但随后我们必须将 url 更改为 / 并且不知何故不是他们要求的。感谢您的解决方案。
    • 所以改变这个要求不是一种选择?这两个地区有何不同?
    • 那是客户端要求 :( 我想我必须写一个中间件来处理这个问题。无论如何谢谢你
    • 不要忘记中间件是不够的。您还需要 i18n_patterns 之类的东西来进行反向工作。祝你好运!
    • 是的,还有中间件和自定义 i18n_patterns :(
    【解决方案2】:

    您可以通过编写自己的 i18n_patterns 副本来实现。

    所以根据定义:

    URL 模式中的语言前缀

    i18n_patterns(*urls, prefix_default_language=True)[source]
    

    这个函数可以在根 URLconf 中使用,Django 将 自动将当前活动语言代码添加到所有 URL 在 i18n_patterns() 中定义的模式。

    这是一个在模板中制作的示例,但您在实现中需要相同的变量/对象。

    在模板中反转

    如果本地化的 URL 在模板中被反转,它们总是使用 当前语言。要链接到另一种语言的 URL,请使用 语言模板标签。它启用所附语言中的给定语言 模板部分:

    {% load i18n %}
    
    {% get_available_languages as languages %}
    
    {% trans "View this category in:" %}
    {% for lang_code, lang_name in languages %}
        {% language lang_code %}
        <a href="{% url 'category' slug=category.slug %}">{{ lang_name }}</a>
        {% endlanguage %}
    {% endfor %}
    

    语言标签需要语言代码作为唯一参数。

    参考:Django docs - i18n/translation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多