【问题标题】:Django Switch language with i18n pattern and normal url_pattern具有 i18n 模式和普通 url_pattern 的 Django Switch 语言
【发布时间】:2015-01-08 17:10:47
【问题描述】:

我必须为具有 i18n 模式的某些 url 的应用程序切换语言,例如我们想要翻译的所有带有前缀的页面,以便获得良好的 SEO,以及我们不想拥有的其他页面网址中的前缀。

所以我将这两种模式分开,直到一切正常,当我在处理切换语言的表单时,我只遇到了问题:

这是我的表格:

<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,因为它不是正确的路径......

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

该语言在某些情况下可以很好地激活。

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    好的,所以我设法让它工作,我只需将 {% 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();
    });
    

    【讨论】:

      【解决方案2】:
      @register.filter(name="strip_lang")
      def strip_lang(value):
          lang = get_language()
          return value.replace('/{0}/'.format(lang), '/')
      

      为我工作。

      【讨论】:

        猜你喜欢
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 2010-11-22
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        相关资源
        最近更新 更多