使用i18n模式和普通url_pattern的Django Switch语言

时间:2015-01-08 17:10:48

标签: python django python-2.7 internationalization django-i18n

我要为那些在i18n模式中有一些网址的应用程序执行切换语言,就像我们想用前缀翻译的所有页面一样,以便拥有良好的搜索引擎优化,以及其他我们不希望拥有的网页网址中的前缀。

所以我分开了2个模式,直到这一切都没问题,当我在处理切换语言的表单时,我只面临问题:

这是我的表格:

<form action="{% url 'set_language' %}" method="POST" class="langform" style="display:none;">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|strip_lang }}" />
<input name="language" id="language" type="hidden" value="" />
</form>

我通过javascript验证。一切都很好,我填写语言值,表格很好提交。 我真正的问题是下一个值,因为我需要一个通用的下一个值,所以我做了一个带有像这样的过滤器的request.path:

@register.filter(name="strip_lang")
    def strip_lang(value):
        lang = get_language()
        return '/%s/' % value.lstrip('/%s/' % lang)

此过滤器的目标是观察url是否具有语言前缀(如果是),将其删除以使下一个值中只有不带前缀的url。

这个过滤器的输出是这样的:如果我们在/ fr / pages / default它将是/ pages / default /

我点击切换语言但没有任何效果。它仍然是同一种语言。所以我删除了一个斜杠但是它是404,因为它不是正确的路径......

我可以做些什么来管理我的两种网址?一个有URL前缀,一个没有...

在某些情况下,语言会很好地激活。

提前感谢!

2 个答案:

答案 0 :(得分:0)

好的,所以我设法让它工作我只需要将{%language lang_code%}添加到我的链接中。

现在我的网址正在使用通用的下一个值。

<ul class="lang-switch">
            {% get_language_info_list for LANGUAGES as languages %}
              {% for language in languages %}
              {% language lang_code %}
              <li><a href="#" rel="{{ language.code }}">{{ language.code|upper }}</a></li>
              {% endlanguage %}
              {% endfor %}
        </ul>

我只是发布我的小javascript,它可以帮助你使它工作并理解我是如何做到的:

  $('.lang-switch li a').click(function (e) {
e.preventDefault;
var lang = $(this).attr('rel');
$('.langform #language').val(lang);
$('.langform').submit();
});

答案 1 :(得分:0)

@register.filter(name="strip_lang")
def strip_lang(value):
    lang = get_language()
    return value.replace('/{0}/'.format(lang), '/')

适合我。