2016-08-22 36 views
0


Im對我的應用程序使用python3和django1.10,以及對django新增的kinnda。
我打算爲django管理面板提供多種語言。 我跟隨Django documantion規則,我發現,我不得不使用本地化middleware ...這裏是我的設置應用使用django的多語言問題

'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.locale.LocaleMiddleware', 
'django.middleware.common.CommonMiddleware', 

我還添加此

LANGUAGES = (
    ('fa', ugettext('Farsi')), 
    ('en', ugettext('English')), 
) 

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'), 
) 

當然,我安裝了GNU gettext並創建了我的區域文件夾與django-admin.py makemessages -l fa逗號nd,然後我翻譯.po文件並編譯它,所以我得到了.mo文件。 到目前爲止,我認爲每件事看起來都不錯,當我只是通過輸入設置文件來更改語言時,每件事情都有效。
現在,這是我的問題,我如何添加功能,從管理面板或視圖更改應用程序語言? 我在我的urls文件中添加url((r'^i18n/', include('django.conf.urls.i18n'))),。但我現在不知道該怎麼做。請幫幫我。你下一步怎麼做 ?我如何添加此表單或sholud添加此表單來更改語言?

<form action="/i18n/setlang/" method="post"> 
    <input name="next" type="hidden" value="/next/page/" /> 
     <select name="language"> 
      {% for lang in LANGUAGES %} 
       <option value="{{ lang.0 }}">{{ lang.1 }}</option> 
      {% endfor %} 
     </select> 
    <input type="submit" value="Go" /> 
</form> 

回答

0

在視圖中,你可以使用:

from django.utils import translation 

# to change to French for example 
translation.activate('fr') 

# and you set it in the session to change it for the user 
request.session[settings.LANGUAGE_SESSION_KEY] = 'fr' 

所以,你可以添加類似於您的視圖的「form_valid」方法的代碼,在語言代碼傳遞在選擇的語言你形成。 https://docs.djangoproject.com/en/1.10/ref/utils/#module-django.utils.translation

也:

有關此的詳細信息,在檢查出的文檔

https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#explicitly-setting-the-active-language

+0

我這個代碼添加到我的看法。但是當我打印出'request.LANGUAGE_CODE'仍然是相同的(EN)...即時股票和困惑:(@Cody Parker –

+0

對不起,您還需要在會話中更改它以手動更改爲用戶。我已經更新了我的答案,以表明這一點。 –

+0

即時通訊試圖找到一種方式,在管理面板中改變它。我的應用程序沒有前視圖或任何意見... 任何建議嗎?也見這裏[問題](它改變我的應用程序語言正確。但它dosent改變我提供的語言文件。我怎麼加載該語言?你能幫我嗎?[我的問題](http://stackoverflow.com/questions/39102538/language-file-dosent- load-automaticaly-in-django) –