2014-09-29 34 views
5

我的設置

settings.pyDjango的makemessages不工作的JS文件

INSTALLED_APPS = (
    ... 
    'myprojectname', 
    ... 
) 

STATIC_ROOT = '/var/www/a_valid_path/' 

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

urls.py

js_info_dict = { 
    'domain': 'djangojs', 
    'packages': ('myprojectname',), 
} 

urlpatterns = patterns('', 
    ... 
    url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), 
    ... 
) 

我的項目結構如下:

|- projectname 
|--- app1 
|--- app2 
|--- manage.py 
|- virtualenv 
|- static 
|--- js 
|--- css 

我的項目的根文件夾中還有locale文件夾,其中manage.py位於。

我做

什麼簡單的運行:

./manage.py -l ro -d djangojs 

我的問題

它不工作。沒有.po文件正在生成。然而,服務器端翻譯工作(視圖+模板)。我遵循了所有的建議,但仍然沒有。甚至試圖自己創建djangojs.po文件,以查看Django是否刪除了該文件,或者對它進行了一些操作 - 不行。

沒有錯誤產生,只顯示processing locale ro(對於很短的時間 - 如果你問我,太短),就是這樣。任何幫助?

編輯:忘了提及我的包含JS文件的文件夾不在每個Django應用程序內,而是在一個單獨的位置。不過,Django不應該在STATICFILES_DIRS裏面看一下嗎?

+0

你想翻譯的'.js'文件在哪裏? – 2014-09-29 08:55:12

+0

它們都位於由默認django設置提供的'static/js'文件夾中,以及在'STATIC_ROOT'變量中聲明的文件夾中(通過'collectstatic')。 – 2014-09-29 09:00:47

回答

1

Django的makemessages只會從您的TEMPLATE_DIRS之一中的文件發出消息。所以你想要翻譯的任何文件都需要在這些目錄之一中。

你可以做,在一個多種方式:

  • 放置* .js文件在你TEMPLATE_DIRS的一個文件,是
  • 在襯裏的JS在HTML文件中
  • 全部到位需要對DOM數據的屬性轉換,並通過JS
  • 從DOM抓住他們
+0

是的,模板正在工作,但您的解決方案不是一種選擇,因爲它會在應用程序的這一點產生巨大的開銷。 – 2014-10-01 12:52:44

+0

另一個(messier)選項將內聯html文件中的JS。 – 2014-10-02 09:35:56

+0

我認爲只有翻譯只在設置文件中設置的TEMPLATE_DIRS中查找。所以,如果你想要你的js文件翻譯,他們需要在你的一個TEMPLATE_DIRS文件中。 – 2014-10-02 09:38:39

0
  1. 字符串是否運行makemessages來自包含JavaScript文件的目錄的父目錄?
  2. JavaScript文件名以.js結尾?
  3. 您是否使用django.gettext('string')_('string')來標記需要翻譯的字符串?
+0

1.沒有。據我所見,Django只會查看當前目錄(無論你運行'django-admin.py'還是'manage.py'),這都不理想。我無法運行更高一級的命令,因爲那是我擁有自己的virtualenv和許多其他東西的地方。是的。 3.我使用'gettext',因爲這就是文檔中使用的示例。如果我從我的JS目錄運行'manage.py',它可以工作。 – 2014-10-08 07:00:41

+0

你可以用你的目錄結構更新你的例子嗎? – 2014-10-08 14:28:09

+0

剛更新了這個問題。 – 2014-10-09 18:10:47