3

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

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

我想拥有http://mysite.com/<region>/<language>/i18n_patterns似乎强制 url 像http://mysite.com/<language>/<region>/. 如何改变这个也

请帮忙

4

2 回答 2

3

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

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

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

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

于 2013-05-28T13:44:38.793 回答
1

您可以通过编写自己的i18n_patterns.

所以根据定义:

URL 模式中的语言前缀

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

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

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

在模板中反转

如果本地化的 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

于 2018-04-06T11:52:32.353 回答