2016-07-02 95 views
0

我已閱讀django關於如何使您的網站提供更多語言的文檔。Django如何允許從管理員和客戶語言選擇器翻譯

說實話,所有的聲音都很複雜,所以我需要幫助來清除一切。

首先,我要做到以下幾點:

  1. 提供的網站成多國語言,但只給客人。所以他們將能夠改變語言,即使他們沒有登錄。我認爲這可能使用URL像website.com/en/indexwebsite.com/es/index等我發現this項目,但似乎過時了,我看是否有任何內置的方式做同樣的事情。
  2. 如果我這樣做了,如果用戶使用像website.com/es/index這樣的直接鏈接進入網站,請點擊該網站的網址,我如何確保它將遵循用戶在網站上輸入的相同語言?
  3. 翻譯django應用程序是通過純文件進行翻譯是如此的恥辱!有沒有辦法允許使用管理界面進行翻譯?我發現this,但我有問題(已過時),並且在互聯網上沒有這樣的信息。

我不是找人來解決我的問題,而是把我在正確的方向,爲以下:

  1. 使網站提供給不同語言的客人(點擊網站網址會記住客人語言首選項)。
  2. 如果我們可以允許翻譯人員使用admin ineterface進行轉換,而不是對轉換程序django文件不友好嗎?

在此先感謝您。

回答

1

你不需要任何第三方包來完成你想要做的事情,Django有它內置的。

  • 您添加django.middleware.locale.LocaleMiddleware到您的中間件,在settings.py
  • 配置的語言環境,
  • 包裹中網址urls.pydjango.conf.urls.i18n.i18n_patterns
  • 翻譯您的字符串

和你做。

對於您用django.conf.urls.i18n.i18n_patterns包裹的網址,您將獲得像site.com/en/lorem-ipsum這樣的網址。

更具體的關於您的問題:

1)這是默認行爲。如果您將管理網址換成django.conf.urls.i18n.i18n_patterns,那麼您也將獲得多種語言的管理網站。使用相同的網址樣式,如site.com/en/admin/。下面是一個例子urls.py

from django.conf.urls import url, include, i18n 
from django.contrib import admin 

urlpatterns += i18n.i18n_patterns(
    url(r'^admin/', admin.site.urls), 
    url(r'^products/', include('your_project.apps.products.urls', namespace='products')), 
    # ... 
) 

2)所有的URL將是一致的語言環境,明智的。例如。如果用戶在site.com/en/home,並有鏈接到about產品頁面鏈接將是`site.com/en/about'

3)我可以理解,這將是更容易更新管理上的翻譯沒有編輯gettext文件等的網站。不過,我喜歡django處理翻譯的方式。做一些關於管理網站的翻譯會涉及到數據庫,我不認爲使用數據庫進行翻譯是一個好主意。

+0

謝謝@ th0th真的很好的解釋。我會試試看,我會讓你知道的。 – John