2012-07-16 80 views
3

我的django應用程序使用歐洲語言。現在我想恢復到英語,正確地進行國際化和本地化。我在setting.py國際化的Django應用程序返回英語

LANGUAGE_CODE = 'en' 
LANGUAGES = [ 
    ('en', 'English'), 
] 

但是整個應用程序仍然沒有顯示英文。我在這裏錯過了什麼嗎? PS。該應用程序也使用Django-CMS。

回答

5

你需要做多件事情:

  • 寫的所有字符串中的一種語言,你的情況的英語。

然後,您需要標記所有字符串翻譯:

  • 添加trans標籤變通模板中的所有字符串(從i18n模板標籤庫),請參閱internationalization的文件中。這與gettext相關:處理翻譯的通用庫。通過在字符串周圍添加trans標籤,它們將包含在需要翻譯的大量字符串列表中(請參閱下面的.po.mo)。
  • 圍繞Python源代碼中的所有字符串添加_()(來自django.utils.translation,另請參閱文檔中的國際化)。這也與gettext有關,這包括gettext語言文件中的那些字符串。

然後,您需要創建語言文件和翻譯添加到這些文件:

  • 創建了gettext包含了翻譯字符串.po.mo文件。在這些文件中,您可以編寫翻譯後的字符串。這兩個文件通常放在​​目錄中。對於每種語言,您需要編寫翻譯後的字符串並將其放入這些文件中。關於這些語言文件的更多細節可以在localization的Django文檔中找到。

很高興閱讀Django關於internationalization and localization(通常稱爲i18n)的概述,因爲上面的解釋只是一般性的解釋。確切的技術細節在文檔中。

請注意,上述內容僅用於翻譯作爲Python代碼或模板一部分的靜態字符串。如果你想翻譯URL或Django模型,那麼你需要安裝額外的庫或使用其他現有的Django功能。例如,在Django 1.4中添加了一些功能來翻譯URL,但對於較早的Django版本,您需要使用庫/ Django應用程序。

+0

非常感謝西蒙。那麼,是的,我知道這些步驟,我創建了一個演示應用程序,然後跳入此應用程序。我的問題是,應用程序是使用django國際化/本地化步驟編寫的,當我嘗試恢復到英語時,它失敗了。 字符串有問題嗎?此應用中使用的字符串是混合的,英文和非英文。 – chhantyal 2012-07-16 10:28:40

+0

不能混合字符串:所有字符串都需要使用一種語言,然後可以使用翻譯文件更改語言。然後,Django知道在更改請求的當前語言時加載正確的語言文件。 – 2012-07-16 10:40:22

+0

再次感謝。我想這是我的應用程序不是以英文呈現的原因。將修復它:) – chhantyal 2012-07-16 10:51:09

1

Simeon的答案涵蓋了所有的內容,但是在這裏,我發現了一些可以幫助任何人在開發環境中測試本地化的東西。

如果您是本地歐洲人,那麼您的瀏覽器可能會要求accepted-language作爲es,僅舉例。

現在,您想要測試當地環境中的英語語言翻譯,那麼您需要考慮以下可能性。

django-book的refrence:

你需要把LocaleMiddleware

1>首先,它會在當前用戶的 會話的django_language關鍵。

2>如果沒有,它會尋找一個cookie。

3>如果失敗,它將查看Accept-Language HTTP標頭。這個 標題由您的瀏覽器發送,並通過優先順序告訴服務器您喜歡哪種語言 。 Django會嘗試使用 標題中的每種語言,直到找到包含可用翻譯的語言。

4>失敗的是,它使用全局LANGUAGE_CODE設置。

現在,你會發現它將檢查LANGUAGE_CODE設置作爲最後的手段。

因此,您可以在瀏覽器中使用HTTP請求攔截器,並更改accepted-language值以便即時測試您的語言翻譯。