2014-10-31 43 views
6

我一直使用這個腳本編譯django.po並且它一直在努力:的I18n停止工作

#!/bin/sh 
django-admin.py makemessages -a 
django-admin.py compilemessages 

它突然停止了工作,與此錯誤:

$ i18n.sh 
Traceback (most recent call last): 
    File "c:/Python34/Scripts/django-admin.py", line 5, in <module> 
    management.execute_from_command_line() 
    File "c:\Python34\lib\site-packages\django\core\management\__init__.py", line 
385, in execute_from_command_line 
    utility.execute() 
    File "c:\Python34\lib\site-packages\django\core\management\__init__.py", line 
377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "c:\Python34\lib\site-packages\django\core\management\base.py", line 288, 
in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "c:\Python34\lib\site-packages\django\core\management\base.py", line 338, 
in execute 
    output = self.handle(*args, **options) 
    File "c:\Python34\lib\site-packages\django\core\management\base.py", line 533, 
in handle 
    return self.handle_noargs(**options) 
    File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag 
es.py", line 283, in handle_noargs 
    potfiles = self.build_potfiles() 
    File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag 
es.py", line 299, in build_potfiles 
    file_list = self.find_files(".") 
    File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag 
es.py", line 358, in find_files 
    ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings 
.STATIC_ROOT)] 
    File "c:\Python34\lib\site-packages\django\core\management\commands\makemessag 
es.py", line 358, in <listcomp> 
    ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings 
.STATIC_ROOT)] 
    File "c:\Python34\lib\ntpath.py", line 491, in normpath 
    if path.startswith(special_prefixes): 
AttributeError: 'NoneType' object has no attribute 'startswith' 
processing file django.po in c:\Users\Debora\workspace\opti\opti2.0\project\loca 
le\pt_BR\LC_MESSAGES 

任何人有任何想法?

我不知道是什麼引起的。最近我更新了django 1.7到1.7.1,安裝了一些不相關的軟件包,這就是我記得可能會受到影響的一些軟件包。

+3

我不得不AFER升級到Django的1.7同樣的問題,並解決它在運行中移除那些使用'manage.py' – cor 2014-10-31 13:35:33

+0

的命令不適用於我,同樣的問題。 – giancarloap 2014-10-31 14:57:17

+0

爲我做了,謝謝! – blissini 2014-12-01 20:51:54

回答

2

只需在settings.py文件中設置STATIC_ROOT即可。

這是一個bug in Django 1.7.1,並應在Django 1.7.2

(由於Django 1.6.2 STATIC_ROOT默認爲None''前。)

+0

這似乎是一個bug,現在它又重新工作了,我沒有改變任何東西,謝謝yofee。 – giancarloap 2015-02-27 17:40:30

0

我有同樣的問題。我試圖用django-admin運行,並得到了這個問題。

當我用manage.py運行它時,它運行正常。

python manage_local.py makemessages -l cs --settings=gprojects.settings_local 

使用manage.py,manage_local.py是我的替代版本。

+1

還沒有爲我工作,同樣的問題。 (我會繼續嘗試) – giancarloap 2014-10-31 20:24:53

2

問題是當你沒有設置你的STATIC_ROOTMEDIA_ROOT設置值。 設置在此之後,如:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 

我使用make_messages.sh腳本:

#!/usr/bin/env bash 

for dir in `find -maxdepth 1 -type d ! -iname ".*"`; do 
    echo $dir 
    tmp=$(basename $dir) 
    dir="$tmp" 
    skip_this=0 
    for tmp in static media; do 
     if [ "$dir" = "$tmp" ]; then 
      skip_this=1 
      break 
     fi 
    done 

    if [ "$skip_this" = "1" ]; then 
     echo Skipping $dir 
     continue 
    fi 

    cd `dirname $0`/$dir 
    if [ ! -d locale ] ; then 
     echo Creating 'locale' directory 
     mkdir locale 
    fi 
    ../manage.py makemessages -l pl -l en -l de 
     cd .. 
done 

和執行make_messages.sh後:

./static_page 
processing locale pl 
processing locale en 
processing locale de 
./common 
Creating locale directory 
processing locale pl 
processing locale en 
processing locale de 

這是我compile_messages.sh腳本:

#!/usr/bin/env bash 

for dir in `find -maxdepth 1 -type d ! -iname ".*"`; do 
     echo $dir 
     tmp=$(basename $dir) 
     dir="$tmp" 
     skip_this=0 
     for tmp in static static_custom media; do 
       if [ "$dir" = "$tmp" ]; then 
         skip_this=1 
         break 
       fi 
     done 

     if [ "$skip_this" = "1" ]; then 
       echo Skipping $dir 
       continue 
     fi 

     cd `dirname $0`/$dir 
     ../manage.py compilemessages -l pl -l en -l de 
     cd .. 
done 
+0

這解決了我的問題,但想知道爲什麼這個問題發生在1.7.1而不是在1.7 – frlan 2014-11-05 19:08:21

2

我有使用Django 1.7.1相同的問題。

我修改了命令:django-admin.pypython manage.py

所以我的整個命令是這樣的:

python manage.py makemessages --locale=en --ignore=templates/admin --ignore=project/settings.py

+0

我也一直在這樣做,你的解決方案適用於我,但只有當我使用'sudo',然後我必須更改權限,這真的很奇怪,但是你幫我找到了一些方法來完成它,所以謝謝 – Zamphatta 2014-11-22 18:08:25

+0

很好聽,我從來不用sudo來運行python命令,但是也許你已經用sudo創建了你的項目或者env,但是我真的不知道爲什麼。謝謝 – 2014-11-24 13:52:52

3

先定義你的本地路徑makemessages

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

在終端

$蟒蛇manage.py makemessages -l PL

去文件夾和o筆文件編輯。PO文件

然後在終端

$蟒蛇manage.py compilemessages

正常工作在Django 1.7並升級了。

我認爲它可以幫助你。