2015-12-04 106 views
2

我遵循here描述的方法。Django +夾層翻譯問題

在索引頁上我有一個表格,可以讓我切換網站語言。我已將「下一次」發佈屬性啓用重定向添加到頁面的正確語言版本。

<form action="{% url 'set_language' %}" method="post"> 
{% csrf_token %} 
<input name="language" type="hidden" value="{{ language.code }}" /> 
<input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" /> 
<input type="submit" value="{{ language.code }}" 
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /></form> 

我有我自己的set_language視圖,如第一個鏈接中所述。以下是在會話中存儲LANGUAGE_SESSION_KEY的視圖的最後部分。

if language and check_for_language(language): 
    if hasattr(request, 'session'): 
     request.session[LANGUAGE_SESSION_KEY] = language 
    else: 
     response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language) 
return response 

我的urls.py的樣子:

urlpatterns = i18n_patterns("", 
    ("^admin/", include(admin.site.urls)), 

    ("^", include("mezzanine.urls")), 

    url("^$", "mezzanine.pages.views.page", {"slug": "/"}, name="home"), 
) 

一般的做法是工作的罰款。當用戶在索引頁面上時,他可以更改語言並將其重定向到正確的頁面。

第一個問題是與夾層鏈接。如果用戶點擊鏈接,他將被重定向到settings.py中由LANGUAGE_CODE定義的語言。同時,如果用戶單擊夾層頁面的菜單項,則一切正常。

第二個問題是當用戶單擊夾層主頁鏈接。在這種情況下,用戶也被重定向到由LANGUAGE_CODE定義的網站版本。

問題是,爲什麼在會話中設置LANGUAGE_SESSION_KEY之後,它對使用正確語言的未來頁面呈現沒有任何影響?

回答

1

我已經通過以下方式解決了我的問題。首先,改變了形式:

<form action="{% url 'set_language' %}" method="post"> 
{% csrf_token %} 
<input name="language" type="hidden" value="{{ language.code }}" /> 
{% if request.path|slice:"4:"|length > 0 %} 
    <input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" /> 
{% else %} 
    <input name="next" type="hidden" value="/" /> 
{% endif %} 
<input type="submit" value="{{ language.code }}" 
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /> 
</form> 

如果用戶選取從主網頁的語言,然後下一個值將是「/」,如果用戶更改其他頁面的語言,然後它改變了語言的前綴。

此外,我不再在夾層中使用鏈接,因爲它們沒有按照當前語言正確解析。我沒有建立正常的夾層頁面。