2010-04-14 174 views
13

我有一個django翻譯的問題。django國際化和翻譯問題

問題1 - 我更新了django.po文件中的字符串,但該更改未出現在網頁上。

問題2 - 我用django-admin.py makemessages -l et創建了自己的語言環境文件,將翻譯字符串添加到文件中,但它們也不出現在頁面上。

我不認爲這是設置問題,因爲從django.po文件的翻譯確實出現在網站上,它只是從我自己生成的文件的變化和翻譯不出現。

編輯: 我的settings.py包含此:

gettext = lambda s: s 
LANGUAGE_CODE = 'et' 

LANGUAGES = (
      ('et', gettext('Estonian')), 
      ) 

我自己的語言環境文件在

/path/to/project/locale/et/LC_MESSAGES/ 

和文件

django.mo和django.po

我在問題1中提到的文件是django own et transaltion,其中I改變。

+0

你準備好了關於[i18n]的文檔嗎(http://docs.djangoproject.com/en/1.1/topics/i18n/internationalization/#topics-i18n-internationalization)?我猜,但是你在模板中啓用了i18n標籤嗎? 你確定你的.po文件在正確的路徑嗎? 你能寫更多的信息嗎? – diegueus9 2010-04-14 18:13:41

+0

好的。 i18n在帶有{%load i18n%}的模板中啓用。由於django.po文件的路徑正確(問題1),我不認爲它是啓用或加載國際化的問題。因爲就像我說的 - 現有的翻譯被加載到模板中。 但我怎麼知道問題2區域設置文件是否在正確的位置?他們在由django-admin.py makemessages -l et – 2010-04-14 18:31:29

+0

生成的地方閱讀此:http://docs.djangoproject.com/en/1.1/topics/i18n/localization/#message-files 路徑將爲: your_project/locale/et/LC_MESSAGES/django.po。 – diegueus9 2010-04-14 18:41:56

回答

25

好吧,我剛纔得到了同樣的錯誤。我解決了它,刪除了我的django.po文件中翻譯字符串上的「#,fuzzy」標籤。看起來翻譯文本如果得到這個標籤就不會被提供,所以請確保翻譯文本然後刪除這一行。

下面是一個PO文件中的翻譯後的文本而不是服務器的例子:

 #: course/models.py:13 
    #, fuzzy 
    msgid "code" 
    msgstr "código" 

所以,只要刪除標誌,讓它像這樣:

 #: course/models.py:13 
    msgid "code" 
    msgstr "código" 

我希望這個工作您。祝你好運!

參考:http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD:我知道你有這個問題幾個月前,但在我離開這個反應是由於你,我們從來沒有聽說過,如果你有這個問題迎刃而解。

+4

我還拉我的幾個頭髮,因爲那些'模糊':) – 2010-08-04 15:59:34

+1

那麼,沒有爲我工作。 Django目前正在以一種神祕的方式工作:( – shailenTJ 2013-08-12 18:07:19

+0

呃!我只花了半個小時試圖弄清楚它是這樣的模糊。 – 3cheesewheel 2013-09-25 18:35:26

-2

檢查USE_I18N設置。 More info。無論如何,我認爲默認情況下它是True ...

7

翻譯文件(PO)只在內存中加載一次,對PO文件的更改不會被Django拾取。爲了加載新的翻譯文件,您需要重新啓動Django(例如,停止/啓動runserver,Apache或NGINX)。

+0

你必須重新啓動django服務器也是我的經驗,但它在文檔中的任何地方都沒有被提及,這很奇怪 – qff 2014-10-24 15:18:50

12

與翻譯沒有出現相同/相似的問題。設置LOCALE_PATHS固定的問題:

# settings.py 
USE_I18N = True 
USE_L10N = True 

LOCALE_PATHS = (
    '/path/to/djangoapp/locale', 
) 
+0

嗯耶django已經收到4個主要升級,因爲我發佈了這個問題。語言環境路徑的確是修復翻譯問題的一種方式,他們被添加到django 1.4中,我認爲。 – 2013-06-14 07:40:05

+2

甚至更​​好,我會推薦'os.path.join(BASE_DIR,'locale'),'。**不要**使用相對路徑,雖然他們在開發中工作,但他們可能無法工作,取決於服務器等。我以艱難的方式瞭解到這一點。 – Wtower 2015-12-15 10:16:31

0

確保使用ugettext_lazy而不是ugettext

0

如果使用gettext.translation得到翻譯,我。E:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site') 

...和你的翻譯作品的開發服務器上而不是在生產,注意locale_dir必須指向你的locale目錄。它可能位於其中一個系統的其他地方。花了2小時才找到它。

1

Django翻譯無法正常工作的另一個原因是編譯.po文件,其Python版本與用於運行應用程序的Python版本不同。確保你使用相同的版本。