2015-06-21 83 views
2

我想用Django和Python製作雙語言(意大利語和英語)網站。 我跟着this小教程,我陷入了疑問。
我不想對本網站的任何數據庫(沒有管理頁面),所以我在settings.py刪除的數據庫設置部分,然後我激活「USE_I18N =真」和ugettext和一切。事實上,當我去本地主機它顯示正確與兩種語言翻譯的/它//EN/本地主機後放:8000
我想,現在,要用於切換語言的按鈕,添加djangoproject代碼到我的模板文件,在這裏:Django國際化靜態網站

{% load i18n %} 
<form action="{% url 'set_language' %}" method="post"> 
{% csrf_token %} 
<input name="next" type="hidden" value="{{ redirect_to }}" /> 
<select name="language"> 
{% get_current_language as LANGUAGE_CODE %} 
{% get_available_languages as LANGUAGES %} 
{% get_language_info_list for LANGUAGES as languages %} 
{% for language in languages %} 
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}> 
    {{ language.name_local }} ({{ language.code }}) 
</option> 
{% endfor %} 
</select> 
<input type="submit" value="Go" /> 
</form> 

的問題是,當我選擇從下拉語言下菜單,錯誤顯示出來

ImproperlyConfigured at /it/i18n/setlang/ 
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. 
Request Method: POST 
Request URL: http://localhost:8000/it/i18n/setlang/ 
Django Version: 1.8.2 
Exception Type: ImproperlyConfigured 
Exception Value:  
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. 

這裏的應用程序樹:

sito_personale --- locale --- en --- LC_MESSAGES --- django.mo 
               --- django.po 
          --- it --- LC_MESSAGES --- django.mo 
               --- django.po 
       --- pages --- migration 
         --- static 
         --- templates 
       --- sito_personale 
       --- manage.py 

有什麼我可以做的解決這個問題?

我真的很感謝您能提供任何幫助。

+1

你能提供你的設置?我想它與如何存儲語言首選項有關^^ – spectras

+0

你的意思是整個settings.py代碼?如果是這樣的話,你在這裏:http://codepad.org/7xUdEGKv 我覺得有可能是某種在urls.py錯誤太:http://codepad.org/pkUn1xI4 –

回答

1

Django將所選語言保存到會話中。 SESSION_ENGINE默認使用數據庫,因爲你不使用db這可能會導致你得到的異常。

嘗試將SESSION_ENGINE設置爲django.contrib.sessions.backends.file,而將會話數據存儲在磁盤上(請參閱Using file-based sessions)。

settings.py附加

所以:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' 

更新

如果您的網站並不需要對會話的支持,你也可以刪除會話中間件。在這種情況下Django會使用cookie來存儲語言偏好

視圖期望通過POST方法被調用,以語言 參數在請求中設置。如果啓用了會話支持,則視圖 將在用戶會話中保存語言選項。否則,它會將默認名爲 django_language的Cookie中的語言選擇保存爲 。 (名稱可以通過 LANGUAGE_COOKIE_NAME設置進行更改。)


更新從評論

後續問題正如warning in the docs,在i18n模式需要在語言獨立的URL模式:

警告
請確保您不包含上面的URL withi n i18n_patterns() - 它需要與語言無關才能正常工作。

下面是如何可能從上面翻譯成你urls.py一個簡單的例子:

urlpatterns = solid_i18n_patterns('', 
    # Examples: 
    # url(r'^$', 'sito_personale.views.home', name='home'), 
    # url(r'^blog/', include('blog.urls')), 
    url(r'', include('pages.urls')), 
) 

urlpatterns += patterns('', 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
) 
+0

好,也有一些進展:現在我沒有得到dabatase錯誤了,但是當我點擊更改語言(即默認語言爲「意大利」,我選擇「英語」)的頁面加載,但在形式的值變回默認一個。 –

+0

並且語言是否保持不變(意大利語)還是頁面顯示英語? – sthzg

+0

它仍然是一樣的。 –

0

我可能已經找到了解決辦法,但我不知道這是否是正確的/最好的。 我已經改變,在模板代碼:

<input name="next" type="hidden" value="{{ redirect_to }}" /> 

<input name="next" type="hidden" value="/" /> 

,現在,它完美的作品!我希望這是解決問題的最好方法,如果有人能夠回答我的疑問,我會非常感激。