2014-10-31 3 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

+0

, не работали для меня, такая же проблема. – giancarloap

+0

сделал это для меня, спасибо! – blissini

ответ

2

Просто установите STATIC_ROOT в свой файл settings.py.

Это bug in Django 1.7.1 и должны быть удалены в Django 1.7.2

Django 1.6.2 STATIC_ROOT по умолчанию в None, до ''.)

+0

Кажется, это ошибка. Теперь он снова работает, я ничего не менял. Спасибо yofee. – giancarloap

0

У меня было то же самое. Я попытался запустить django-admin и получил эту проблему.

Когда я запустил его с помощью manage.py, он работает нормально.

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

Использование manage.py, manage_local.py - это моя альтернативная версия.

+1

Не работала для меня еще, такая же проблема. :(Я продолжу попытки. – giancarloap

2

Проблема заключается в том, что вы не установили значения настроек STATIC_ROOT и MEDIA_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

5

Если бы тот же вопрос после обновления до Django 1.7

Я установил его, указав модуль настройки каждый раз, когда я бегу django-admin.py:

cd ~/myproject/myproject # where the ``locale`` folder exists 
PYTHONPATH=~/myproject django-admin.py makemessages --settings=myproject.settings -l <language> 

Update: Это ошибка исправлена ​​в Django 1.7.2 см : https://docs.djangoproject.com/en/1.7/releases/1.7.2/ https://code.djangoproject.com/ticket/23717

2

меня были те же проблемы, используя Django 1.7.1.

Я установил его, изменив команду: django-admin.py - python manage.py.

Так вся моя команда выглядит следующим образом:

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

+0

. Я тоже это сделал, ваше решение работает для меня, но только когда я используйте 'sudo'. Затем мне нужно изменить разрешения. Это действительно странно, но вы помогли мне найти способ сделать это, так что спасибо. – Zamphatta

+0

Замечательно. Мне никогда не приходилось использовать sudo для запуска команды python, но возможно, вы создали свой проект или ваш env с помощью sudo, но я действительно не знаю почему. Спасибо –

3

первого Определите локальный путь для makemessages

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

В терминале

$ питона manage.py makemessages -l пл

перейдите в папку и о отредактируйте файл.ро файл

Затем в терминале

$ питона manage.py compilemessages

он отлично работает в Django 1.7 и модернизированы тоже.

Я думаю, это может вам помочь.

Смежные вопросы